Ms sql server skriver frågor. Exekvera SQL-frågor i Management Studio. Lägga till ett medelberäknat fält

Tabelluttryck kallas underfrågor som används där närvaron av en tabell förväntas. Det finns två typer av tabelluttryck:

    härledda tabeller;

    generaliserade tabelluttryck.

Dessa två former av tabelluttryck diskuteras i följande underavsnitt.

Härledda tabeller

Härledd tabellär ett tabelluttryck som ingår i FROM-satsen i en fråga. Härledda tabeller kan användas i fall där det inte är möjligt att använda kolumnalias eftersom SQL-översättaren bearbetar en annan sats innan aliaset är känt. Exemplet nedan visar ett försök att använda ett kolumnalias i en situation där en annan klausul bearbetas innan aliaset är känt:

ANVÄND SampleDb; SELECT MONTH(EnterDate) som enter_month FRÅN Works_on GROUP BY enter_month;

Om du försöker köra den här frågan får du följande felmeddelande:

Meddelande 207, nivå 16, tillstånd 1, rad 5 Ogiltigt kolumnnamn "enter_month". (Meddelande 207: Nivå 16, Status 1, Rad 5 Ogiltigt kolumnnamn enter_month)

Orsaken till felet är att GROUP BY-satsen bearbetas innan motsvarande lista med SELECT-satsen bearbetas, och kolumnaliaset enter_month är okänt när gruppen bearbetas.

Det här problemet kan lösas genom att använda en härledd tabell som innehåller den föregående frågan (utan GROUP BY-satsen) eftersom FROM-satsen exekveras före GROUP BY-satsen:

ANVÄND SampleDb; VÄLJ enter_month FROM (SELECT MONTH(EnterDate) som enter_month FROM Works_on) AS m GROUP BY enter_month;

Resultatet av den här frågan blir så här:

Vanligtvis kan ett tabelluttryck placeras var som helst i en SELECT-sats där ett tabellnamn kan förekomma. (Resultatet av ett tabelluttryck är alltid en tabell eller, i speciella fall, ett uttryck.) Exemplet nedan visar användningen av ett tabelluttryck i SELECT-listan för en SELECT-sats:

Resultatet av denna fråga:

Generiska tabelluttryck

Common Table Expression (OTB)är ett namngivet tabelluttryck som stöds av Transact-SQL-språket. Vanliga tabelluttryck används i följande två typer av frågor:

    icke-rekursiv;

    rekursiv.

Dessa två typer av förfrågningar diskuteras i följande avsnitt.

OTB och icke-rekursiva frågor

Den icke-rekursiva formen av OTB kan användas som ett alternativ till härledda tabeller och vyer. Vanligtvis bestäms OTB av MED klausuler och en ytterligare fråga som refererar till namnet som används i WITH-satsen. I Transact-SQL är innebörden av nyckelordet WITH tvetydig. För att undvika tvetydighet bör satsen som föregår WITH-satsen avslutas med semikolon.

ANVÄND AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (VÄLJ AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") OCH Frakt > (VÄLJ AVG(TotalDue) FROM Sales.SalesOrderHeader "Order2Datum05" =(Order2Datum05) ")/2.5;

Frågan i det här exemplet väljer beställningar vars totala skatter (TotalDue) är högre än genomsnittet av alla skatter och vars fraktavgifter (frakt) är större än 40 % av den genomsnittliga skatten. Den huvudsakliga egenskapen för denna fråga är dess längd, eftersom underfrågan måste skrivas två gånger. En av möjliga sätt att minska storleken på frågekonstruktionen skulle vara att skapa en vy som innehåller en underfråga. Men den här lösningen är lite komplicerad eftersom den kräver att man skapar en vy och sedan raderar den efter att frågan har körts klart. Ett bättre tillvägagångssätt skulle vara att skapa en OTB. Exemplet nedan visar användningen av icke-rekursiv OTB, vilket förkortar frågedefinitionen ovan:

ANVÄND AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_2005 FROMAND price_05 FROM AND price_05) (SELECT year_2005 FROMAND price_05) ) /2,5;

WITH-satssyntaxen i icke-rekursiva frågor är följande:

Parametern cte_name representerar OTB-namnet som definierar den resulterande tabellen, och parametern column_list representerar listan med kolumner i tabelluttrycket. (I exemplet ovan kallas OTB price_calc och har en kolumn, year_2005.) Inner_query-parametern representerar en SELECT-sats som anger resultatuppsättningen för motsvarande tabelluttryck. Det definierade tabelluttrycket kan sedan användas i outer_query. (Den yttre frågan i exemplet ovan använder OTB price_calc och dess kolumn year_2005 för att förenkla den dubbelt kapslade frågan.)

OTB och rekursiva frågor

Detta avsnitt presenterar material med ökad komplexitet. Därför, när du läser den för första gången, rekommenderas det att hoppa över den och återvända till den senare. OTB:er kan användas för att implementera rekursioner eftersom OTB:er kan innehålla referenser till sig själva. Den grundläggande OTB-syntaxen för en rekursiv fråga ser ut så här:

Parametrarna cte_name och column_list har samma betydelse som i OTB för icke-rekursiva frågor. Brödtexten i en WITH-sats består av två frågor kombinerade av operatören UNION ALLA. Den första frågan anropas bara en gång och den börjar samla resultatet av rekursionen. Den första operanden för UNION ALL-operatören refererar inte till OTB. Denna fråga kallas en referensfråga eller källa.

Den andra frågan innehåller en referens till OTB och representerar dess rekursiva del. På grund av detta kallas det en rekursiv medlem. I det första anropet till den rekursiva delen representerar OTB-referensen resultatet av referensfrågan. Den rekursiva medlemmen använder resultatet av det första frågeanropet. Efter detta anropar systemet den rekursiva delen igen. Ett anrop till en rekursiv medlem stoppas när ett tidigare anrop till den returnerar en tom resultatuppsättning.

UNION ALL-operatören sammanfogar de för närvarande ackumulerade raderna, såväl som ytterligare rader som läggs till av det aktuella anropet till den rekursiva medlemmen. (Närvaron av UNION ALL-operatorn innebär att duplicerade rader inte tas bort från resultatet.)

Slutligen anger parametern outer_query den yttre frågan som OTB använder för att hämta alla anrop till joinen för båda medlemmarna.

För att demonstrera den rekursiva formen av OTB använder vi flygplanstabellen definierad och fylld med koden som visas i exemplet nedan:

ANVÄND SampleDb; CREATE TABLE Airplane(ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Flygplan", "Fuselage", 1, 10); INSERT INTO Airplane VALUES ("Flygplan", "Vingar", 1, 11); INFOGA I Flygplans VÄRDEN ("Flygplan", "Svans", 1, 12); INFOGA I flygplansvärden ("Fuselage", "Salon", 1, 13); INFOGA I flygplansvärden ("Fuselage", "Cockpit", 1, 14); INSERT INTO Airplane VALUES ("Fuselage", "Nose",1, 15); INSERT INTO Airplane VALUES ("Cabin", NULL, 1,13); INSERT INTO Airplane VALUES ("Cockpit", NULL, 1, 14); INSERT INTO Airplane VALUES ("Nose", NULL, 1, 15); INSERT INTO Airplane VALUES ("Vingar", NULL,2, 11); INSERT INTO Airplane VALUES ("Svans", NULL, 1, 12);

Flygplanstabellen har fyra kolumner. Kolumnen ContainingAssembly identifierar sammansättningen och ContainedAssembly-kolumnen identifierar delarna (en efter en) som utgör motsvarande sammansättning. Bilden nedan visar en grafisk illustration av en möjlig typ av flygplan och dess beståndsdelar:

Flygplanstabellen består av följande 11 rader:

Följande exempel använder WITH-satsen för att definiera en fråga som beräknar den totala kostnaden för varje build:

ANVÄND SampleDb; WITH list_of_parts(assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * DEC2IMALcost AS) ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Part", kvantitet "Quantity", kostnad "Price" FROM list_of_parts;

WITH-satsen definierar en OTB-lista med namnet list_of_parts, bestående av tre kolumner: assembly1, quantity och cost. Den första SELECT-satsen i exemplet anropas endast en gång för att lagra resultaten av det första steget i rekursionsprocessen. SELECT-satsen på den sista raden i exemplet visar följande resultat.

SQL eller Structured Query Language är ett språk som används för att hantera data i ett relationsdatabassystem (RDBMS). Denna artikel kommer att täcka vanliga SQL-kommandon, som alla programmerare borde känna till. Detta material är idealiskt för dig som vill fräscha upp sina kunskaper om SQL inför en anställningsintervju. För att göra detta, titta på exemplen som ges i artikeln och kom ihåg att du studerade databaser i par.

Observera att vissa databassystem kräver ett semikolon i slutet av varje sats. Semikolonet är standardpekare i slutet av varje sats i SQL. Exemplen använder MySQL, så ett semikolon krävs.

Skapa en databas för exempel

Skapa en databas för att visa hur team fungerar. För att fungera måste du ladda ner två filer: DLL.sql och InsertStatements.sql. Därefter öppnar du en terminal och loggar in på MySQL-konsolen med följande kommando (artikeln förutsätter att MySQL redan är installerat på systemet):

Mysql -u root -s

Ange sedan ditt lösenord.

Kör följande kommando. Låt oss kalla databasen "universitet":

SKAPA DATABAS universitet; ANVÄND universitet; KÄLLA ; KÄLLA

Kommandon för att arbeta med databaser

1. Visa tillgängliga databaser

VISA DATABASER;

2. Skapa en ny databas

SKAPA DATABAS;

3. Välja en databas att använda

ANVÄNDA SIG AV ;

4. Importera SQL-kommandon från en .sql-fil

KÄLLA ;

5. Ta bort databasen

SLIP DATABAS ;

Arbeta med tabeller

6. Se de tillgängliga tabellerna i databasen

VISA TABELLER;

7. Skapa en ny tabell

SKAPA BORD ( , , PRIMÄRNYCKEL ( ), FRÄMMANDE NYCKEL ( ) REFERENSER ());

Integritetsbegränsningar när du använder CREATE TABLE

Du kan behöva skapa begränsningar för vissa kolumner i en tabell. När du skapar en tabell kan du ställa in följande begränsningar:

  • en tabellcell kan inte ha ett NULL-värde;
  • primärnyckel - PRIMARY KEY (kolnamn1, kolnamn2, ...) ;
  • främmande nyckel - UTLÄNDSK NYCKEL (kolnamnx1, …, kolnamnxn) REFERENSER tabellnamn(kolnamnx1, …, kolnamnxn) .

Du kan ange mer än en primärnyckel. I det här fallet får du en sammansatt primärnyckel.

Exempel

Skapa en tabell "instruktör":

CREATE TABLE-instruktör (ID CHAR(5), namn VARCHAR(20) NOT NULL, dept_name VARCHAR(20), lön NUMERIC(8,2), PRIMÄRNYCKEL (ID), FOREIGN KEY (avd_namn) REFERENSER avdelning(avd_namn));

8. Tabellinformation

Du kan se olika information (värdetyp, nyckel eller inte) om tabellkolumner med följande kommando:

BESKRIVA ;

9. Lägga till data i tabellen

SÄTT IN I (, , , ...) VÄRDEN ( , , , …);

När du lägger till data till varje kolumn i en tabell behöver du inte ange kolumnnamn.

SÄTT IN I VÄRDEN ( , , , …);

10. Uppdatering av tabelldata

UPPDATERING UPPSÄTTNING = , = , ... VAR ;

11. Ta bort all data från tabellen

DELETE FRÅN ;

12. Ta bort en tabell

SLÄPP BORD ;

Kommandon för att skapa frågor

13. VÄLJ

SELECT används för att hämta data från en specifik tabell:

VÄLJ , , … FRÅN ;

Följande kommando kan visa all data från tabellen:

VÄLJ FRÅN ;

14. VÄLJ DISTINKT

Tabellkolumner kan innehålla dubbletter av data. Använd SELECT DISTINCT för att bara hämta icke-duplicerade data.

VÄLJ DISTINKT , , … FRÅN ;

15. VAR

Du kan använda nyckelordet WHERE i SELECT för att ange villkor i en fråga:

VÄLJ , , … FRÅN VAR ;

Följande villkor kan anges i begäran:

  • textjämförelse;
  • jämförelse av numeriska värden;
  • logiska operatorer AND (och), OR (eller) och NOT (negation).

Exempel

Prova följande kommandon. Var uppmärksam på villkoren som anges i VAR:

SELECT * FROM course WHERE dept_name=’Comp. Sci.'; VÄLJ * FRÅN kurs VAR poäng>3; SELECT * FROM course WHERE dept_name="Comp. Sci." OCH poäng>3;

16. GRUPP AV

GROUP BY-operatören används ofta med aggregerade funktioner såsom COUNT, MAX, MIN, SUM och AVG för att gruppera utdatavärden.

VÄLJ , , … FRÅN GRUPP AV ;

Exempel

Låt oss visa antalet kurser för varje fakultet:

SELECT COUNT(course_id), dept_name FRÅN kurs GROUP BY dept_name;

17. HA

Nyckelordet HAVING lades till i SQL eftersom WHERE inte kan användas med aggregerade funktioner.

VÄLJ , , ... FRÅN GRUPP AV HAR

Exempel

Låt oss visa en lista över fakulteter som har mer än en kurs:

VÄLJ ANTAL(kurs_id), avd_namn FRÅN kurs GRUPPER EFTER avd_namn ATT HA ANTAL(kurs_id)>1;

18. BESTÄLL AV

ORDER BY används för att sortera frågeresultat i fallande eller stigande ordning. ORDER BY kommer att sortera i stigande ordning om inte ASC eller DESC anges.

VÄLJ , , … FRÅN SORTERA EFTER , , …ASC|DESC;

Exempel

Låt oss visa en lista över kurser i stigande och fallande poängordning:

VÄLJ * FRÅN kurs BESTÄLL EFTER poäng; VÄLJ * FRÅN kurs BESTÄLLNING EFTER poäng DESC;

19. MELLAN

BETWEEN används för att välja datavärden från ett specifikt intervall. Numeriska och textvärden, samt datum.

VÄLJ , , … FRÅN VAR MELLAN OCH ;

Exempel

Låt oss visa en lista över instruktörer vars lön är mer än 50 000, men mindre än 100 000:

VÄLJ * FRÅN instruktör VAR lön MELLAN 50000 OCH 100000;

20. GILLA

LIKE-operatorn används i WHERE för att ange ett sökmönster för ett liknande värde.

Det finns två gratisoperatörer som används i LIKE:

  • % (inga, ett eller flera tecken);
  • _ (ett tecken).
VÄLJ , , … FRÅN VAR TYCKA OM ;

Exempel

Låt oss visa en lista över kurser vars namn innehåller "till" och en lista över kurser vars namn börjar med "CS-":

VÄLJ * FRÅN kurs WHERE titel LIKE '%to%'; SELECT * FROM course WHERE course_id LIKE "CS-___";

21. IN

Med IN kan du ange flera värden för WHERE-satsen:

VÄLJ , , … FRÅN VAR I ( , , …);

Exempel

Låt oss visa en lista över studenter från Comp majors. Sci., Fysik och El. Eng.:

SELECT * FROM student WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

22. GÅ MED

JOIN används för att länka två eller flera tabeller med vanliga attribut inom dem. Bilden nedan visar olika sätt går med i SQL. Observera skillnaden mellan en vänster yttre koppling och en höger yttre koppling:

VÄLJ , , … FRÅN ANSLUTA SIG = ;

Exempel 1

Vi kommer att visa en lista över alla kurser och relevant information om fakulteterna:

VÄLJ * FRÅN kurs GÅ MED avdelning PÅ course.dept_name=department.dept_name;

Exempel 2

Vi kommer att visa en lista över alla obligatoriska kurser och detaljer om dem:

VÄLJ prereq.course_id, title, dept_name, credits, prereq_id FROM prereq VÄNSTER YTTRE GÅ MED kurs PÅ prereq.course_id=course.course_id;

Exempel 3

Vi kommer att visa en lista över alla kurser, oavsett om de är obligatoriska eller inte:

SELECT course.course_id, title, dept_name, credits, prereq_id FRÅN prereq HÖGER YTTRE JOIN-kurs PÅ prereq.course_id=course.course_id;

23. Utsikt

View är en virtuell SQL-tabell skapad som ett resultat av exekvering av ett uttryck. Den innehåller rader och kolumner och är väldigt lik en vanlig SQL-tabell. View visar alltid den senaste informationen från databasen.

Skapande

SKAPA VY SOM VAL , , … FRÅN VAR ;

Borttagning

DROP VIEW ;

Exempel

Låt oss skapa en vy som består av kurser med 3 poäng:

24. Aggregerade funktioner

Dessa funktioner används för att få ett aggregerat resultat relaterat till den aktuella informationen. Följande är vanliga aggregatfunktioner:

  • COUNT (kolnamn) - returnerar antalet rader;
  • SUM (col_name) - returnerar summan av värdena i denna kolumn;
  • AVG (kolnamn) - returnerar medelvärdet för en given kolumn;
  • MIN (kolnamn) - returnerar det minsta värdet av en given kolumn;
  • MAX (kolnamn) - Returnerar det största värdet i en given kolumn.

25. Kapslade underfrågor

Kapslade underfrågor är SQL-frågor som inkluderar SELECT-, FROM- och WHERE-satser kapslade i en annan fråga.

Exempel

Låt oss hitta kurser som undervisades hösten 2009 och våren 2010:

SELECT DISTINCT course_id FROM section WHERE termin = 'Höst' AND year= 2009 AND course_id IN (SELECT course_id FROM section WHERE termin = 'Vår' AND year= 2010);

SQL - Structured Query Language.
I denna recension Vi kommer att titta på de vanligaste typerna av SQL-frågor.
SQL-standarden är definierad ANSI(American National Standards Institute).
SQL är ett språk som riktar sig specifikt till relationsdatabaser.

SQL-partitionering:


DDL
(Data Definition Language) - det så kallade Schema Description Language i ANSI, består av kommandon som skapar objekt (tabeller, index, vyer och så vidare) i databasen.
DML(Språk för datamanipulation) är en uppsättning kommandon som bestämmer vilka värden som representeras i tabeller vid varje given tidpunkt.
DCD(Datahanteringsspråk) består av faciliteter som avgör om en användare ska tillåta att utföra vissa åtgärder eller inte. De är en del av ANSI DDL. Glöm inte dessa namn. Dessa är inte olika språk, utan delar av SQL-kommandon grupperade efter deras funktioner.

Datatyper:

SQL Server - Datatyper

Beskrivning

bigint (int 8)

bigint (int 8)

binär(n)

binär(inte heller bild

karaktär
(synonym röding)

nationell karaktär eller ntext

karaktär varierande(synonym röding varierande varchar)

nationalkaraktär varierande eller ntext

Datum Tid

datum Tid

decimal

aka numerisk

Dubbel precision

Dubbel precision

heltal (int 4) (synonym: int)

heltal (int 4)

nationalkaraktär(synonym: nationalkaraktär, nchar)

nationalkaraktär

Numerisk(synonymer: decimal, dec)

nationalkaraktär varierande(synonymer: riksröding varierande, nvarchar)

Nationell karaktär varierande

Smalldatetime

datum Tid

smallint (int 2)

smallint (int 2)

Småpengar

sql_variant

Stöds inte längre

Ntext
Från och med SQL Server 2005 rekommenderas den inte för användning.

Tidsstämpel

Stöds inte

pytteliten (int 1)

pytteliten (int 1)

Unikidentifierare

unik identifierare

varbinär(n)

varbinär(inte heller bild

smalldatetime

datum Tid

smallint (int 2)

smallint (int 2)

småpengar

sql_variant

Stöds inte

tidsstämpel

Stöds inte

pytteliten (int 1)

pytteliten (int 1)

unik identifierare

unik identifierare

varbinär(n)

varbinär(inte heller bild

Datatyptabell i SQL Server 2000

VAD ÄR EN BEGÄRAN?

Begäranär ett kommando du ger till ditt databasprogram. Frågor är en del av DML-språket. Alla SQL-frågor består av ett enda kommando. Strukturen för det här kommandot är bedrägligt enkelt eftersom du måste utöka det för att utföra mycket komplexa utvärderingar och datamanipulationer.

SELECT kommando:

VÄLJ"Select" är det vanligaste kommandot, det används för att välja data från tabellen.
Typ av fråga med SELECT:

SELECT id, user_name, city, birth_day FROM users_base;

En sådan fråga kommer att visa från user_base-tabellen alla värden i de angivna kolumnerna separerade med kommatecken efter SELECT-kommandon. Du kan också visa alla kolumner med ett tecken, * dvs. SELECT * FROM users_base ; - En sådan fråga kommer att visa all data från tabellen.

SELECT kommandostruktur:

SELECT (Kolumnnamn separerade med kommatecken som måste visas i frågan) FROM (tabellnamn i databasen)
– Det här är den enklaste typen av begäran. Det finns ytterligare kommandon för bekväm datahämtning (se nedan "Funktioner")

DML-kommandon:

Värden kan placeras och tas bort från fält med hjälp av tre DML-kommandon (Data Manipulation Language):
FÖRA IN(Föra in)
UPPDATERING(Uppdatering, ändring),
RADERA(Radera)

INSERT kommando:

INSERT INTO users_base (användarnamn, stad, födelsedag) VÄRDEN ('Alexander', 'Rostov', '06/20/1991');

INSERT-kommandot kommer med prefixet INTO (in to), sedan inom parentes står namnen på kolumnerna som vi måste infoga data i, sedan kommer VALUES-kommandot (värden) och inom parentes kommer värdena i tur och ordning (det är nödvändigt för att observera värdens ordning med kolumnerna måste värdena vara i samma ordning som kolumnerna du angav).

UPDATE kommando:

UPPDATERA users_base SET user_name = 'Alexey';

Kommandot UPDATE uppdaterar värden i en tabell. Först kommer själva kommandot UPDATE, sedan tabellnamnet, efter kommandot SET (set), sedan kolumnnamnet och dess värde inom citattecken (citattecken placeras om värdet är i strängformat, om det är ett numeriskt värde och kolumnen är inte knuten till datatypen vchar eller någon annan strängtyp, citattecken har ingen betydelse.)

DELETE kommando:

DELETE FROM users_base WHERE user_name = 'Vasily';

Kommandot DELETE tar bort hela raden och identifierar raden med WHERE-kriteriet. I det här fallet skulle den här frågan radera alla rader där kolumnvärdet för användarnamn var Vasily. Vi kommer att prata om WHERE-kriteriet och andra lite senare.

Kriterier, funktioner, förutsättningar m.m. vad hjälper oss i SQL:

WHERE-satsen är en sats för SELECT-kommandot och andra DML-kommandon som låter dig ställa in predikat vars villkor kan vara antingen sant eller falskt för vilken rad som helst i tabellen. Kommandot hämtar endast de rader från tabellen för vilka detta påstående är sant.
Exempel:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Alexey';- en sådan fråga visar endast de rader som matchar WHERE-villkoret, nämligen alla rader där användarnamnkolumnen har värdet Alexey.

ORDER BY - villkor för sortering av valda rader. Har 2 kriterier ASC och DESC. ASC (sorterar från A till Ö eller från 0 till 9)

DESC (motsatsen till ASC).
Exempel:
VÄLJ ID, stad, födelsedag FROM users_base ORDER BY user_name ASC; - en sådan fråga kommer att visa värden sorterade efter användarnamnkolumnen från A till Ö (A-Z; 0-9)

Detta villkor kan också användas tillsammans med WHERE-satsen.
Exempel:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Alexey' BESTÄLLNING EFTER id ASC;

DISTINCT är ett argument som ger dig ett sätt att eliminera dubbla värden från din SELECT-sats. De där. om du har dubbletter av värden i en kolumn, låt oss säga användarnamn, då visar DISTINCT dig bara ett värde, till exempel har du 2 personer som heter Alexey i din databas, då kommer en fråga som använder DISTINCT-funktionen att visa dig bara 1 värde som man stöter på först...
Exempel:
SELECT DISTINCT user_name FROM users_base;- en sådan fråga kommer att visa oss värdena för alla poster i kolumnen användarnamn, men de kommer inte att upprepas, dvs. om du hade ett oändligt antal upprepade värden, kommer de inte att visas...

AND - tar två booleska (i formen A OCH B) som argument och utvärderar dem mot sanningen om de båda är sanna.
Exempel:
SELECT * FROM users_base WHERE stad = 'Rostov' OCH user_name = 'Alexander';- kommer att visa alla värden från tabellen där namnet på staden visas på en rad (i det här fallet Rostov och användarnamnet Alexander.

ELLER - tar två booleska (i formen A ELLER B) som argument och utvärderar om ett av dem är korrekt.

SELECT * FROM users_base WHERE stad = 'Rostov' ELLER user_name = 'Alexander';- kommer att visa alla värden från tabellen där namnet på staden Rostov eller användarnamnet Alexander visas på raden.

NOT - tar en enda boolesk (i formen NOT A) som argument och ändrar dess värde från falskt till sant eller sant till falskt.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- kommer att visa alla värden från tabellen där namnet på staden Rostov visas på en rad eller användarnamnet inte exakt är Alexander.

IN - definierar en uppsättning värden där ett givet värde kan inkluderas eller inte.
SELECT * FROM users_base WHERE city IN ('Vladivostok', 'Rostov');- en sådan fråga kommer att visa alla värden från tabellen som innehåller namnen på de angivna städerna i stadskolumnen

Between liknar IN-operatören. Till skillnad från att definiera med siffror från en mängd, som IN gör, definierar BETWEEN ett intervall vars värden måste minska för att göra predikatet sant.
SELECT * FROM users_base WHERE id MELLAN 1 OCH 10;- visar alla värden från tabellen som kommer att vara i intervallet från 1 till 10 i id-kolumnen

COUNT - Producerar radnummer eller icke-NULL-värden för fälten som frågan valde.
VÄLJ ANTAL (*) FRÅN users_base ;- kommer att visa antalet rader i denna tabell.
SELECT COUNT (DISTINCT user_name) FROM users_base ;- kommer att visa antalet rader med användarnamn (upprepas inte)

SUM - producerar den aritmetiska summan av alla valda värden för ett givet fält.
SELECT SUM (id) FROM users_base ;- kommer att visa summan av värdena för alla rader i id-kolumnen.

AVG - medelvärde för alla valda värden i detta fält.
VÄLJ AVG (id) FRÅN users_base ;- kommer att visa genomsnittet av alla valda värden i id-kolumnen

MAX - producerar det största av alla valda värden för detta fält.

MIN - producerar det minsta av alla valda värden för detta fält.

Skapa tabeller:

CREATE TABLE users_base (id heltal, användarnamn text, stad text, födelsedag datetime);- att utföra ett sådant kommando kommer att leda till skapandet av tabellen som jag gav exempel på... Allt är enkelt här, vi skriver kommandot CREATE TABLE, följt av namnet på tabellen som vi vill skapa, sedan inom parentes, separerade med kommatecken, namnen på kolumnerna och deras datatyp. Detta är standardsättet att skapa en tabell i SQL. Nu ska jag ge ett exempel på att skapa tabeller i SQL Server 2005:

SÄTT PÅ ANSI_NULLS

SÄTT PÅ QUOTED_IDENTIFIER

OM INTE FINNS (VÄLJ * FROM sys.objects WHERE object_id = OBJECT_ID(N."") OCH skriv in (N"U"))
BÖRJA
SKAPA BORD .(

INTE NULL,
INTE NULL,
INTE NULL,
PRIMÄRNYCKEL KLUSTERAD
A.S.C.


SLUTET

SÄTT PÅ ANSI_NULLS

SÄTT PÅ QUOTED_IDENTIFIER

OM INTE FINNS (VÄLJ * FROM sys.objects WHERE object_id = OBJECT_ID(N."") OCH skriv in (N"U"))
BÖRJA
SKAPA BORD .(
IDENTITET(1,1) INTE NULL,
NULL,
NULL,
PRIMÄRNYCKEL KLUSTERAD
A.S.C.
) MED (IGNORE_DUP_KEY = AV) PÅ
) PÅ TEXTIMAGE_ON
SLUTET

SÄTT PÅ ANSI_NULLS

SÄTT PÅ QUOTED_IDENTIFIER

OM INTE FINNS (VÄLJ * FROM sys.objects WHERE object_id = OBJECT_ID(N."") OCH skriv in (N"U"))
BÖRJA
SKAPA BORD .(
IDENTITET(1,1) INTE NULL,
NULL,
NULL,
PRIMÄRNYCKEL KLUSTERAD
A.S.C.
) MED (IGNORE_DUP_KEY = AV) PÅ
) PÅ
SLUTET

Syntax i SQL Server 2005 är ett annat ämne, jag ville bara visa att jag beskrev grunderna i SQL-programmering, du kan nå toppen genom att känna till grunderna.

Om du har några frågor om detta ämne, skriv till mig

Utveckla en applikation som visar grundläggande operationer på data i en databas som MS SQL Server, nämligen:

  • ansluta databasen till applikationen;
  • visa databastabeller på formuläret;
  • tillägg ny ingång till databasen;
  • redigera en post;
  • radera en post.

Databasen Education.dbo tas som grund, vars skapelseprocess beskrivs i detalj

Figur 1 visar strukturen för databasen Education.dbo. Som framgår av figuren heter databasen:

sasha-pc\sqlexpress.Education.dbo

Här är "sasha-pc" datoridentifieraren på nätverket, "sqlexpress" är namnet på databasservern, "Education.dbo" är namnet på databasen.

Ris. 1. Education.dbo databas

Databasen innehåller två tabeller: Student och Session. Tabellernas struktur är följande.

Studentbord.

Sessionstabell.

Prestanda

1. Skapa ett nytt projekt i MS Visual Studio som Windows Forms Application.

Skapa ett nytt projekt av typen Windows Forms Application. Ett exempel på att skapa ett nytt projekt beskrivs i detalj

2. Skapa en ny vy för att visa data från elevtabellen.

För att visa data från databastabeller kan du använda olika sätt. En av dem är skapandet av vyer, som genereras med hjälp av MS Visual Studio.

I vårt fall kommer tabelldata att visas på formuläret i en kontroll av typen DataGridView. Efter att ha skapat vyer är det mycket bekvämt att associera dem med DataGridView-element.

För att skapa en vy måste du anropa kommandot "Lägg till ny vy" från snabbmenyn, som anropas genom att högerklicka på elementet "Visningar" i Education.dbo-databasen (Figur 2).

Ris. 2. Anropa kommandot för att lägga till en ny vy

Som ett resultat kommer fönstret "Lägg till tabell" att öppnas (Figur 3). I fönstret måste du välja de tabeller som läggs till i vyn.

Ris. 3. Välj de tabeller som den nya vyn ska baseras på

I vårt fall väljer du Studenttabellen och bekräftar ditt val genom att klicka på knappen Lägg till. Nästa steg är att stänga fönstret genom att välja knappen Stäng.

När du har slutfört stegen kommer ett fönster att genereras där du måste välja de fält som ska visas i vyn (på formuläret). Välj alla fält (Figur 4).

När du väljer fält visas fälten i elevtabellen överst i arbetsområdet. Med hjälp av musen kan du välja önskade fält för presentation.

Följaktligen visar mittområdet i fönstret namnen på de valda fälten, tabellen där de finns (se fig. 4), möjligheten att sortera, filtrera, etc.

Längst ned i området visas motsvarande SQL-frågetext som används för att skapa vyn.

Ris. 4. Välja Studenttabellfält som ska visas i vyn

Efter att ha valt ett lag

Arkiv->Spara alla Arkiv->Spara vy1

Ett fönster öppnas där du måste ange namnet på vyn. Ställ in namnet "Visa elev" (Figur 5).

Ris. 5. Ange ett namn för vyn

När du har slutfört stegen kommer presentationsfönstret att se ut som i figur 6.

Ris. 6. Visa Studentrepresentation i databasen

Du kan nu vara värd för en DataGridView-kontroll och associera den med en vy.

3. Placera DataGridView-kontrollen och konfigurera anslutningen till databasen.

Innan du placerar DataGridView-kontrollen måste du gå in i formulärdesignläget "Form1.cs".

DataGridView-elementet är en tabell som kan visa data. Denna kontroll finns i Toolbox-panelen. Först justerar vi formulärets storlek något och placerar sedan DataGridView-kontrollen på den (Figur 7). Detta kommer att skapa en objektinstans som heter dataGridView1 som standard.

Ris. 7. DataGridView kontroll och datakälla val fönster

Efter att ha placerat DataGridView-kontrollen i formuläret kan du i det övre högra hörnet välja att konfigurera datakällan. Följaktligen kommer fönstret "DataGridView Tasks" att öppnas. I det här fönstret måste du välja popupmenyn "Välj datakälla".

I menyn som öppnas väljer du kommandot "Lägg till projektdatakälla..." (Fig. 7). Efter detta öppnas ett guidefönster, där datakällan väljs sekventiellt.

Figur 8 visar " Konfigurationsguide för datakälla", där typen av datakälla är vald. I vårt fall installerar vi "Databas".

Ris. 8. Välja en datakällastyp

I nästa fönster (Figur 9) väljs datakällans modell. Du måste välja DataSet.

Ris. 9. Välja en datakälla modell

I fönstret som visas i figur 10 måste du ange vilken dataanslutning du vill använda för att ansluta till databasen. I vårt fall måste vi välja databasen " sasha-pc\sqlexpress\Education.dbo«.

Ris. 10. Välja en dataanslutning

Nästa fönster (Figur 11) föreslår att du sparar anslutningssträngen i programmets konfigurationsfil. Vi lämnar allt som det är och går vidare till nästa fönster.

Ris. 11. Förslag om att spara databasanslutningssträngen Connection String i applikationens konfigurationsfil

Efter att ha skapat en databasanslutning visas en mängd olika databasobjekt (Figur 12). I vårt fall måste vi välja vyn "Visa student" och alla fält från den. De markerade fälten kommer att visas i DataGridView-typkomponenten.

Ris. 12. Välja de databasobjekt som ska visas i DataGridView

Efter att ha valt knappen Slutför kommer de valda objekten (Visa studentvy) i Education.dbo-databasen att visas (Figur 13).

Ris. 13. DataGridView-kontroll med valda Visa Student-fält

På liknande sätt kan du konfigurera vyer som innehåller alla fält från vilken databastabell som helst. Dessutom kan fält från olika tabeller visas i en vy.

4. Ställa in utseendet på DataGridView-kontrollen.

Om du kör applikationen får du data från View Student-vyn, som motsvarar elevtabellen i databasen (Figur 14).

Ris. 14. Starta applikationen för körning

Som du kan se i figur 14 visas data i tabellen dataGridView1 normalt, men designen kan justeras.

En kontroll av typen DataGridView låter dig justera utseendet på fälten som visas.

För att anropa kommandon för redigering av fält, ring bara upp snabbmenyn genom att högerklicka på dataGridView1-kontrollen.

Menyn har olika användbara kommandon, som låter dig styra utseendet och driften av DataGridView:

  • kommando för att blockera kontrollen (låskontroller);
  • kommando för att redigera fälten som visas i vyn (Redigera kolumner...);
  • kommando för att lägga till nya fält, till exempel beräknade (Lägg till kolumn).

I vårt fall måste du välja kommandot "Redigera kolumner..." (Figur 15).

Ris. 15. Kommandot "Redigera kolumner..." från snabbmenyn

Som ett resultat kommer fönstret "Redigera kolumner" att öppnas, där du kan anpassa utseendet på presentationsfälten efter eget tycke (Figur 16).

Ris. 16. Fönster för att ställa in vyn av fält i vyn "Visa student".

I fönstret i figur 16 kan du för alla fält konfigurera namn, justering, bredd, möjlighet att redigera data, etc.

5. Anslutningssträng

För att göra ändringar i databasen måste du få en anslutningssträng till databasen Connection String .

Det finns olika sätt att få databasanslutningssträngen. En av dem är baserad på att läsa den här raden i fönstret Egenskaper i databasen Education.dbo (Fig. 17).

Ris. 17. Definiera en anslutningssträng

För att spara strängen i programmet, en intern variabel av typen sträng. Använd urklippet och kopiera Connection String till den beskrivna strängvariabeln.

I texten i filen "Form1.cs" i början av beskrivningen av Form1-klassen måste du beskriva variabeln:

sträng konn_sträng = ;

För tillfället är texten i klassen Form1 som följer:

offentlig delklass Form1 : Form { sträng conn_string = @"Datakälla=(lokal)\SQLEXPRESS;Initial Catalog=Utbildning;Integrerad säkerhet=True;Pooling=False"; offentligt formulär1() { InitializeComponent(); } privat void Form1_Load(objektavsändare, EventArgs e) { // TODO: Denna kodrad laddar data till tabellen "educationDataSet.View_Student". Du kan flytta eller ta bort den efter behov. } }

6. Skapande ny form för att demonstrera datamanipuleringskommandon.

För att kunna behandla uppgifterna i den aktuella posten måste du skapa ett nytt formulär. Processen att skapa ett nytt formulär i MS Visual Studio - C# beskrivs i detalj.

Lägga till ett nytt formulär görs med kommandot:

Projekt -> Lägg till Windows-formulär...

I fönstret "Nytt objekt" som öppnas måste du välja elementet "Windows Form".

Lämna det nya formulärfilnamnet som standard "Form2.cs".

Figur 18 visar en vy av den nya blanketten.

Vi placerar följande typer av kontroller på formuläret:

  • två knappkontroller (knapparna OK och Avbryt). Följaktligen kommer två objekt benämnda knapp1 och knapp2 att tas emot;
  • fyra etikettkontroller för att skapa informationsmeddelanden;
  • fyra kontroller av typen TextBox för att mata in data i fälten Num_book, Name, Group, Year.

Du måste konfigurera följande egenskaper för kontrollerna:

  • i egenskapen kontrollknapp1 Text = "OK";
  • i kontrollegenskapen button2 Text = "Avbryt";
  • i kontrollknapp1 egenskapen DialogResult = "OK ";
  • i kontrollknapp2-egenskapen DialogResult = "Avbryt";
  • i egenskapen kontroll label1 Text = "Num_book";
  • i egenskapen kontroll label2 Text = "Namn";
  • i egenskapen kontrolletikett3 Text = "Grupp";
  • i label4 styr egenskapen Text = "Year".

Vi konfigurerar också synligheten för TextBox-kontroller. För att göra detta, i alla kontroller textBox1, textBox2, textBox3, textBox4, egenskapsvärdet Modifiers = "public".

Ris. 18. Vy över det nyskapade formuläret

7. Lägga till knappar för att anropa kommandon för att manipulera data från elevtabellen.

För vidare arbete måste du använda musen för att växla till huvudformuläret Form1.

Lägg till tre knappar i huvudformuläret för Form1-ansökan (Knapp). Tre objektvariabler skapas automatiskt med namnen knapp1, knapp2, knapp3. I var och en av dessa knappar gör vi följande inställningar (Egenskapsfönster):

  • i knappen button1 egenskap Text = "Infoga ..." (infoga post);
  • i knappen button2-egenskapen Text = "Redigera ..." (ändra post);
  • i knappen button3 egenskapen Text = "Radera".

Som ett resultat av de ändringar som gjorts kommer huvudformuläret att se ut som i figur 19.

Ris. 19. Huvudform för ansökan

8. Programmera en klickhändelse på knappen "Infoga...".

Klicka på händelsehanteraren på knappen "Infoga..." ser ut så här:

privat void button1_Click_1(objektavsändare, EventArgs e) { sträng cmd_text; Form2 f2 = new Form2(); if (f2.ShowDialog() == DialogResult .OK) { cmd_text = "INSERT INTO Student VALUES (" + """ + f2.textBox1.Text + "" , "" + f2.textBox2.Text + "", "" + f2.textBox3.Text + "", " + f2.textBox4.Text + ")" ; // skapa en anslutning till databasen SqlConnection sql_conn = new SqlConnection(conn_string); // skapa ett kommando i SQL-språk SqlCommand sql_comm = new SqlCommand(cmd_text, sql_conn); sql_conn.Open(); // öppen anslutning sql_comm.ExecuteNonQuery(); // kör kommandot i SQL-språk sql_conn.Close(); // nära anslutning denna .view_StudentTableAdapter.Fill(denna .educationDataSet.View_Student); } }

Form2 kallas först. Efter att ha mottagit "OK"-resultatet (tryck på motsvarande knapp), i Form2 ingår de ifyllda fälten i element av typen TextBox i SQL-frågesträngen. SQL-frågan för att lägga till en ny rad ser ut så här:

INFOGA I Student VÄRDEN (värde1, värde2, värde3, värde4)

där värde1 motsvarar betygsbokens nummer; värde2 – elevens efternamn; värde3 – grupp där studenten studerar; värde4 – inträdesår.

Anslutningssträngen för databasen Connection String beskrivs i variabeln conn_string (se avsnitt 5). Klassobjektet SqlConnection kopplar applikationen till datakällor. Dessutom hanterar Connection-klassen användarautentisering, nätverk, databasidentifiering, anslutningsbuffring och transaktionsbearbetning.

SQL-kommandot som lägger till en post i en tabell är inkapslat i klassen SqlCommand. Konstruktorn av klassen SqlCommand tar två parametrar: en SQL-frågesträng (cmd_text-variabel) och ett objekt av klassen SqlConnection.

Metoden ExecuteNonQuery() implementeras i IDBCommand-gränssnittet. Metoden implementerar SQL-kommandon som inte returnerar data. Sådana kommandon inkluderar INSERT, DELETE, UPDATE-kommandon, såväl som lagrade procedurer som inte returnerar data. Metoden ExecuteNonQuery() returnerar antalet inblandade poster.

9. Programmera en klickhändelse på knappen "Redigera...".

Klicka på händelsehanteraren på knappen "Redigera..." ser ut så här:

privat void button2_Click(objektavsändare, EventArgs e) ( sträng cmd_text; Form2 f2 = new Form2 (); int index; sträng num_book; index = dataGridView1.CurrentRow.Index; num_book = Konvertera .ToString(dataGridView1.Value); f2.textBox1 .Text = num_book; f2.textBox2.Text = Konvertera .ToString(dataGridView1.Value); f2.textBox3.Text = Konvertera .ToString(dataGridView1.Value); f2.textBox4.Text = Konvertera .ToString(dataGridView1.Value); if (f2.ShowDialog() == DialogResult .OK) ( cmd_text = "UPPDATERA Student SET Num_book = ""+ f2.textBox1.Text + "", " + " = "" + f2.textBox2.Text + "", " + " = "" + f2.textBox3.Text + "", " + "År = " + f2 .TextBox4.Text + "What num_book =" " + num_book +" "" "" SQLConNection SQL_Conn = Ny SQLConNECTION (Conn_String); SQLCMAND SQL_comm = Ny SQLCMANT (CMD_TEXT , sql_conn); sql_conn.onquery (sql_conn.onquery (); .q)executenlonquery (). ; sql_conn.Close(); denna .view_StudentTableAdapter.Fill(denna .educationDataSet.View_Student); ) )

Den här hanteraren kör ett UPDATE SQL-kommando som ändrar det aktuella värdet för den aktiva posten.

10. Programmera en klickhändelse på knappen "Radera".

Händelsehanteraren för klick på "Radera"-knappen ser ut så här:

privat void button3_Click(objektavsändare, EventArgs e) ( string cmd_text = "DELETE FROM Student" ; int index; string num_book; index = dataGridView1.CurrentRow.Index; num_book = Convert.ToString(dataGridView1.Value); cmd_text = "DELETE FROM Student WHERE . = ""+ num_book + """ ; SqlConnection sql_conn = new SqlConnection (conn_string); SqlCommand sql_comm = new SqlCommand (cmd_text, sql_conn); sql_conn.Open(); sql_comm.Execute(execute.ql_ Adapter. Fyll (denna .educationDataSet.View_Student); )

Den här hanteraren kör SQL-kommandot DELETE för att radera en post.

Relaterade ämnen

  • Utmatning av en Microsoft Access-databastabell

SQL Server Management Studio tillhandahåller ett komplett verktyg för att skapa alla typer av frågor. Med hjälp av den kan du skapa, spara, ladda och redigera frågor. Dessutom kan du arbeta med frågor utan att ansluta till någon server. Detta verktyg ger också möjlighet att utveckla frågor för olika projekt.

Du kan arbeta med frågor med antingen frågeredigeraren eller lösningsutforskaren. Den här artikeln täcker båda dessa verktyg. Utöver dessa två komponenter i SQL Server Management Studio kommer vi att titta på felsökning av SQL-kod med den inbyggda debuggern.

Frågeredigerare

För att öppna frågeredigeringspanelen Frågeredigerare, i verktygsfältet SQL Server Management Studio, klicka på knappen Ny fråga. Den här panelen kan utökas för att visa knappar för att skapa alla möjliga frågor, inte bara Databas Engine-frågor. Som standard skapas den ny förfrågan Databasmotorkomponent, men genom att klicka på motsvarande knapp i verktygsfältet kan du också skapa MDX, XMLA, etc.-frågor.

Statusfältet längst ned på panelen Frågeredigerare indikerar statusen för redaktörens anslutning till servern. Om du inte ansluter till servern automatiskt, när du startar frågeredigeraren, visas dialogrutan Anslut till server, där du kan välja servern du vill ansluta till och autentiseringsläge.

Att redigera frågor offline ger mer flexibilitet än när du är ansluten till en server. För att redigera frågor är det inte nödvändigt att ansluta till servern, och frågeredigeringsfönstret kan kopplas bort från en server (med menykommandot Fråga --> Anslutning --> Koppla från) och kopplas till en annan utan att öppna ett annat redigeringsfönster. För att välja offlineredigeringsläge, använd dialogrutan Anslut till server som öppnas när du startar redigeraren. specifik typ förfrågningar klickar du helt enkelt på knappen Avbryt.

Du kan använda frågeredigeraren för att utföra följande uppgifter:

    skapa och exekvera Transact-SQL-satser;

    spara skapade Transact-SQL-språksatser till en fil;

    skapa och analysera genomförandeplaner för vanliga frågor;

    grafiskt illustrerar exekveringsplanen för den valda frågan.

Frågeredigeraren innehåller en inbyggd textredigerare och ett verktygsfält med en uppsättning knappar för olika åtgärder. Frågeredigerarens huvudfönster är uppdelat horisontellt i en frågepanel (överst) och en resultatpanel (längst ned). Transact-SQL-satser (det vill säga frågor) som ska köras skrivs in i den övre rutan och resultaten av systemets bearbetning av dessa frågor visas i den nedre rutan. Bilden nedan visar ett exempel på hur du anger en fråga i frågeredigeraren och resultatet av att köra den frågan:

Den första USE request-satsen anger att SampleDb-databasen ska användas som den aktuella databasen. Den andra satsen, SELECT, hämtar alla rader från tabellen Employee. För att köra den här frågan och visa resultaten klickar du på knappen Kör i verktygsfältet i Query Editor eller trycker på F5.

Du kan öppna flera Query Editor-fönster, d.v.s. göra flera anslutningar till en eller flera instanser av databasmotorn. En ny anslutning skapas genom att klicka på knappen Ny fråga i verktygsfältet SQL Server Management Studio.

Statusfältet längst ned i Frågeredigerarens fönster visar följande information relaterad till exekvering av frågesatser:

    statusen för den aktuella operationen (till exempel "Begäran slutförd framgångsrikt");

    databasservernamn;

    aktuellt användarnamn och serverprocess-ID;

    aktuellt databasnamn;

    tid för att utföra den senaste begäran;

    antal hittade rader.

En av de främsta fördelarna med SQL Server Management Studio är dess användarvänlighet, vilket även gäller för Query Editor. Frågeredigeraren tillhandahåller många funktioner för att göra kodning av Transact-SQL-satser enklare. I synnerhet använder den syntaxmarkering för att förbättra läsbarheten för Transact-SQL-satser. Alla reserverade ord visas i blått, variabler visas i svart, strängar visas i rött och kommentarer visas i grönt.

Dessutom är frågeredigeraren utrustad med kontextkänslig hjälp som anropas Dynamisk hjälp, genom vilken du kan få information om en specifik instruktion. Om du inte känner till syntaxen för en instruktion, välj den i editorn och tryck sedan på F1-tangenten. Du kan också markera parametrarna för olika Transact-SQL-satser för att få hjälp med dem från Books Online.

SQL Management Studio stöder SQL Intellisense, som är en typ av automatiskt kompletteringsverktyg. Med andra ord föreslår denna modul det mest sannolika slutförandet av delvis inmatade Transact-SQL-satselement.

Objektutforskaren kan också hjälpa dig att redigera frågor. Om du till exempel vill veta hur man skapar en CREATE TABLE-sats för tabellen Employee, högerklickar du på tabellen i Objektutforskaren och den resulterande innehållsmeny välj Script Table As --> CREATE to --> New Query Editor Window. Frågeredigerarens fönster som innehåller CREATE TABLE-satsen som skapats på detta sätt visas i bilden nedan. Denna funktion gäller även för andra objekt, såsom lagrade procedurer och funktioner.

Objektläsaren är mycket användbar för att grafiskt visa exekveringsplanen för en viss fråga. Frågeexekveringsplanen är det exekveringsalternativ som valts av frågeoptimeraren bland flera möjliga alternativ uppfylla en specifik begäran. Ange önskad fråga i den övre panelen i editorn, välj en sekvens av kommandon från menyn Fråga --> Visa uppskattad exekveringsplan, och exekveringsplanen för denna fråga kommer att visas i den nedre panelen i redigeringsfönstret.

Lösningsutforskare

Frågeredigering i SQL Server Management Studio är baserad på lösningsmetoden. Om du skapar en tom fråga med knappen Ny fråga kommer den att baseras på en tom lösning. Du kan se detta genom att köra en sekvens av kommandon från menyn Visa --> Solution Explorer omedelbart efter att du har öppnat en tom fråga.

Beslutet kan vara relaterat till inget, ett eller flera projekt. En tom lösning, inte kopplad till något projekt. För att associera ett projekt med en lösning, stäng den tomma lösningen, Solution Explorer och Query Editor och skapa ett nytt projekt genom att köra Arkiv --> Nytt --> Projekt. I fönstret Nytt projekt som öppnas väljer du alternativet SQL Server Scripts i mittpanelen. Ett projekt är ett sätt att organisera filer på en specifik plats. Du kan tilldela ett namn till projektet och välja en plats för dess plats på disken. När du skapar ett nytt projekt lanseras en ny lösning automatiskt. Projektet kan läggas till befintlig lösning med Solution Explorer.

För varje skapat projekt visar Solution Explorer mapparna Connections, Queries och Diverse. För att öppna ett nytt Frågeredigeringsfönster för ett givet projekt, högerklicka på dess Fråge-mapp och välj Ny fråga från snabbmenyn.

Felsökning av SQL Server

SQL Server, som börjar med SQL Server 2008, har en inbyggd kodfelsökning. För att starta en felsökningssession, välj Debug --> Start Debugging från huvudmenyn i SQL Server Management Studio. Vi kommer att titta på hur debuggern fungerar med hjälp av ett exempel som använder en grupp kommandon. En batch är en logisk sekvens av SQL-satser och procedurtillägg som skickas till databasmotorn för att exekvera alla satser den innehåller.

Bilden nedan visar ett paket som räknar antalet anställda som arbetar med projekt p1. Om detta nummer är 4 eller fler, visas ett motsvarande meddelande. Annars visas de anställdas för- och efternamn.

För att stoppa exekveringen av ett paket vid en specifik instruktion kan du ställa in brytpunkter, som visas i figuren. För att göra detta, klicka till vänster om linjen du vill stanna på. När felsökningen börjar stoppas exekveringen vid den första kodraden, som är markerad med en gul pil. För att fortsätta köra och felsöka, välj menykommandot Debug --> Continue. Batchinstruktionerna kommer att fortsätta att utföras tills den första brytpunkten, och den gula pilen stannar vid den punkten.

Information relaterad till felsökningsprocessen visas i två paneler längst ned i fönstret för frågeredigerare. Information om olika typer Felsökningsinformation är grupperad i dessa paneler på flera flikar. Den vänstra rutan innehåller fliken Autos, fliken Locals och upp till fem Watch-flikar. Den högra rutan innehåller flikarna Call Stack, Threads, Breakpoints, Command Window, Immediate Window och Output. Fliken Locals visar variabelvärden, fliken Call Stack visar samtalsstackvärden och fliken Breakpoints visar brytpunktsinformation.

För att avsluta felsökningsprocessen, kör en sekvens av kommandon från huvudmenyn Debug --> Stop Debugging eller klicka på den blå knappen i felsökningsverktygsfältet.

SQL Server 2012 lägger till flera nya funktioner till den inbyggda debuggern i SQL Server Management Studio. Nu kan du utföra ett antal av följande operationer i den:

    Ange ett brytpunktsvillkor. Brytpunktstillståndär ett SQL-uttryck vars utvärderade värde avgör om kodexekveringen kommer att stoppas vid en given punkt eller inte. För att ange ett brytpunktsvillkor, högerklicka på den röda brytpunktsikonen och välj Villkor från snabbmenyn. Dialogrutan Brytpunktsvillkor öppnas, så att du kan ange det önskade booleska uttrycket. Dessutom, om du behöver stoppa exekvering om uttrycket är sant, bör du ställa in Is True-omkopplaren. Om exekveringen behöver stoppas om uttrycket har ändrats, måste du ställa in omkopplaren När ändrad.

    Ange antalet träffar vid brytpunkten. Träffartalet är villkoret för att stoppa exekveringen vid en given punkt baserat på antalet gånger som brytpunkten träffades under exekveringen. När det angivna antalet passeringar och något annat villkor som specificerats för en given brytpunkt uppnås, utför debuggern den angivna åtgärden. Villkoret för att avbryta körningen baserat på antalet träffar kan vara något av följande:

    1. ovillkorlig (standardåtgärd) (bryt alltid);

      om antalet träffar är lika med det angivna värdet (bryt när hans antal är lika med ett specificerat värde);

      om antalet träffar är en multipel av ett specificerat värde (bryt när antalet träffar är lika med en multipel av ett specificerat värde);

      Bryt när hans antal är större eller lika med ett specificerat värde.

    För att ställa in antalet träffar under felsökning, högerklicka på önskad brytpunktsikon på fliken Brytpunkter, välj Antal träffar från snabbmenyn och välj sedan ett av villkoren i dialogrutan Antal träffar brytpunkt som öppnas från föregående lista. För alternativ som kräver ett värde anger du det i textrutan till höger om rullgardinsmenyn för villkor. Klicka på OK för att spara de angivna villkoren.

    Ange ett brytpunktsfilter. Ett brytpunktsfilter begränsar brytpunktsdriften till endast specificerade datorer, processer eller trådar. För att ställa in ett brytpunktsfilter, högerklicka på den brytpunkt du vill ha och välj Filter från snabbmenyn. Ange sedan resurserna som du vill begränsa exekveringen av denna brytpunkt till i dialogrutan Breakpoint Filters som öppnas. Klicka på OK för att spara de angivna villkoren.

    Ange en åtgärd vid en brytpunkt. Tillståndet When Hit specificerar åtgärden som ska vidtas när batchkörning når en given brytpunkt. Som standard, när både träffräkningsvillkoret och stoppvillkoret är uppfyllda, avbryts exekveringen. Alternativt kan ett fördefinierat meddelande visas.

    För att ange vad som ska göras när en brytpunkt träffas, högerklicka på den röda ikonen för brytpunkten och välj När träff på snabbmenyn. I dialogrutan When Breakpoint is Hit som öppnas väljer du den åtgärd du vill vidta. Klicka på OK för att spara de angivna villkoren.

    Använd Quick Watch-fönstret. Du kan se värdet på ett Transact-SQL-uttryck i QuickWatch-fönstret och sedan spara uttrycket i Watch-fönstret. För att öppna Quick Watch-fönstret, välj Quick Watch från Debug-menyn. Uttrycket i det här fönstret kan antingen väljas från rullgardinsmenyn Uttryck eller skrivas in i detta fält.

    Använd verktygstipset Snabbinformation. När du för musen över ett kod-ID, snabbinfo ( Kort information) visar sin annons i ett popup-fönster.




Topp