Programmierung und Ablaufsteuerung in Transact SQL
- 12-09-2022
- Toanngo92
- 0 Comments
Mục lục
Kompositionsweise in der T-SQL-Programmierung
Diese Komponenten ermöglichen die Handhabung verschiedener Operationen, die nicht in einer einzigen Anweisung abgeschlossen werden können. Benutzer können mehrere Befehle gruppieren und eine der folgenden Methoden verwenden:
- Batches : Eine Liste mit einem oder mehreren Befehlen, die als Abfrageeinheit von der Anwendung an den Server gesendet werden
- Gespeicherte Prozeduren : Eine gespeicherte Prozedur ist eine Sammlung vorkompilierter und vordefinierter T-SQL-Befehle auf dem Server.
- Trigger : Ein Trigger ist eine Art gespeicherte Prozedur, die ausgeführt wird, wenn der Benutzer ein Ereignis wie INSERT, UPDATE, DELETE in der Tabelle verarbeitet.
- Skripts : Eine Reihe von T-SQL-Anweisungen, die in einer Datei gespeichert sind und für die Eingabe über SSMS oder sqlcmd verwendet werden
- Variablen : Eine Variable, die vom Benutzer als Eingabe einer T-SQL-Anweisung verwendet werden kann
- Control-of-Flow : Steuern Sie den dideefu-Fluss zum Erstellen bedingter Konstrukte in T-SQL
- Fehlerbehandlung: Fehlerbehandlungsmechanismus, der verwendet wird, um Fehler zu kontrollieren und Benutzern Informationen bereitzustellen, wenn Fehler auftreten.
T-SQL-Batches
Die T-SQL ist eine Gruppe von einer oder mehreren Anweisungen, die als Abfrageeinheit von der Anwendung an den Server gesendet werden. SQL Server kompiliert den Batch in eine einzelne Ausführungseinheit, die als Ausführungsplan bezeichnet wird. Im Ausführungsplan führt SQL die Anweisungen nacheinander aus. Jede Anweisung endet mit einem „;“. Diese Bedingung ist optional, aber die Grundlage für das Beenden der Anweisung ohne das „;“ ist veraltet und wird möglicherweise in der neuen Version von SQL Server entfernt. Verwenden Sie also dauas ; Es wird immer empfohlen, die Anweisung zu beenden.
Wenn ein Kompilierungsfehler wie ein Syntaxfehler auftritt, wird der Stapel nicht ausgeführt.
Ein Laufzeitfehler wie eine Einschränkungsverletzung oder eine algorithmische Logik führt zu einer der folgenden Situationen:
- Die meisten Laufzeitfehler stoppen den aktuellen Befehl und die folgenden Anweisungen im Batch
- Ein als Einschränkung angegebener Laufzeitfehler wird nur verwendet, wenn die Anweisung existiert und die restlichen Teile der Anweisung noch ausgeführt werden.
SQL-Anweisungen, die vor dem Auftreten des Laufzeitfehlers ausgeführt wurden, sind nicht betroffen. Die einzige Ausnahme ist, wenn der Batch eine Transaktion ist und der Fehler bei einem Rollback in der Transaktion auftritt.
Angenommen, der Stapel enthält beispielsweise 10 Anweisungen und 6 Anweisungen weisen einen Fehler auf, dann werden die verbleibenden Anweisungen im Stapel nicht ausgeführt. Wenn der Stapel kompiliert wird und der dritte Befehl fehlschlägt, werden die ersten beiden Anweisungen ausgeführt.
Einige Regeln, die bei der Verwendung von Stapeln zu beachten sind:
- CREATE FUNCTION, CREATE DEFAULT, CREATE RULE, CREATE TRIGGER, CREATE PROCEDURE, CREATE VIEW oder CREATE SCHEMA können nicht mit einer anderen Anweisung im Batch verkettet werden. Die CREATE-Anweisung startet den Stapel, und alle verbleibenden Anweisungen innerhalb des Stapels werden als Teil der CREATE-Anweisungsdefinition betrachtet.
- Es wurden keine Änderungen an der Tabelle vorgenommen und die neuen Spalten wurden wieder so referenziert, wie sie waren
- Wenn die erste Anweisung im Stapel eine Ausführungsanweisung ist, ist der Befehl excute nicht erforderlich, er ist nur erforderlich, wenn die Ausführungsanweisung nicht in der ersten Anweisung im Stapel vorhanden ist.
Batch-Beispiel:
USE AdventureWorks2019; GO GREATE VIEW dbo.vProduct AS SELECT ProductNumber, Name FROM Production.Product; GO SELECT * FROM dbo.vProduct; GO
Beispiel 2 wird verwendet, um mehrere BATCHs in einer Transaktion zusammenzufassen:
BEGIN TRANSACTION GO USE AdventureWorks2019; GO CREATE TABLE Company( Id_Num int IDENTITY(1,1), Company_Name nvarchar(100)) GO INSERT Company (Company_Names) ('Company 1') INSERT Company (Company_Names) ('Company 2') INSERT Company (Company_Names) ('Company 3') GO SELECT Id_Num, Company_Name FROM dbo.Company ORDER BY Company_Name ASC; GO COMMIT; GO
Im obigen Code werden mehrere Batches zu einer Transaktion zusammengefasst. Die Anweisungen BEGIN TRANSACTION und COMMIT definieren das Öffnen und Schließen der Transaktion. CREATE TABLE, BEGIN TRANSACTION, SELECT, COMMIT und USE sind Batches mit einzelnen Anweisungen. INSERT-Anweisungen werden alle in einem Batch gepackt.
Variable (Variable) in T-SQL
In SQL Server können Variablen als Parameter deklariert und verwendet werden oder dynamische Abfragen als von der Anwendung übergebener Parameter schreiben. SQL Server bietet Anweisungen zum Deklarieren und Zuweisen von Werten zu Variablen.
ERKLÄREN
Die Variable wird über die DECLARE-Anweisung im Batch-Body initialisiert. Diesen Variablen werden Werte mit SELECT- oder SET-Anweisungen zugewiesen. Variablen werden mit dem Wert NULL initialisiert, wenn vom Benutzer zum Zeitpunkt der Deklaration kein Wert angegeben wird.
Syntax:
DECLARE {(@local_variable [AS] data_type) } [= value]}
Zum Beispiel:
USE AdventureWorks2019; GO DECLARE @find varchar(30) = 'Man%'; SELECT p.LastName, p.FirstName, ph.PhoneNumber FROM Person.Person AS p JOIN Person.PersonPhone AS ph ON p.BusinessEntityID = ph.BusinessEntityID WHERE LastName LIKE @find;
EINSTELLEN
Die SET-Anweisung weist einer mit DECLARE initialisierten lokalen Variablen einen Wert zu, um den Wert der Variablen zu ermitteln
Syntax:
SET {@local_variable = {expression}} {@local_variable {+= | -= | *= | /= | %= | &= | ^= | |=}}
Bedienererklärung:
- += gleich hinzufügen und zuweisen
- -= Subtrahieren und Gleiches zuweisen
- *= multiplizieren und gleich zuweisen
- /= dividieren und gleich zuweisen
- %= durch Rest dividieren und gleich zuweisen
- &= bitweises UND und anschließend zuweisen
- ^= bitweises XOR und anschließend zuweisen
- |= Bitweises ODER und anschließend zuweisen.
Zum Beispiel:
DECLARE @myvar char(20); SET @myvar = 'Hello world';
AUSWÄHLEN
Die SELECT-Anweisung gibt die lokale Variable an, die durch die DECLARE-Anweisung angegeben wurde, um den Ausdruck abzurufen
Syntax:
SELECT {@local_variable {= | += | -= | *= | /= | %= | &= | ^= | != } expresssion}
Zum Beispiel:
USE AdventureWorks2019 GO DECLARE @var1 nvarchar(30); SELECT @var1 = 'company hello'; SELECT @var1 = Name FROM Sales.Store WHERE BusinessEntityID = 10; SELECT @var1 AS 'Company name';
Die SET- und SELECT-Anweisungen sehen ähnlich aus, haben aber einen kleinen Unterschied:
- Mit SET kann immer nur eine Variable gleichzeitig zugewiesen werden, mit SELECT können jedoch mehreren Variablen gleichzeitig Werte zugewiesen werden.
- SET kann nur eine grundlegende Datentypzuweisung aus der Abfrage zuweisen, wird einen Fehler verursachen, wenn die Daten eine Reihe von Zeilen und Spalten sind. Allerdings kann SELECT einer Variablen mehrere Rückgabewerte zuweisen.
Synonyme
Synonyme ist ein Datenbankobjekt, das den folgenden Zwecken dient:
- Es schlägt einen anderen Namen für verschiedene Datenbankobjekte vor, auch Basisobjekt genannt, die auf einem entfernten oder lokalen Server existieren können.
- Es stellt eine Abstraktionsschicht dar, die die Clientanwendung vor Änderungen schützt, die an der Position und dem Namen des Basisobjekts vorgenommen werden.
Betrachten Sie beispielsweise die Department-Tabelle in AdventureWorks2019, die sich auf einem Server namens server1 befindet. Um auf eine Tabelle von Server 2 mit dem Namen server2 zu verweisen, muss der Client vier Elementnamen verwenden:
server1.AdventureWorks2019.Personalabteilung.Abteilung
Wenn der Speicherort der Tabelle geändert wird, z. B. auf einen anderen Server, darf die Client-Anwendung von dieser Änderung nicht betroffen sein. Um diese beiden Probleme zu lösen, können Benutzer ein Synonym DeptEmpTable owr Server2 für die Department-Tabelle auf Server1 erstellen
Von dort aus muss der Client nur noch eine mit dem Namen DeptEmpTable verwenden , um auf die Department- Tabelle zu verweisen.
Wenn sich der Speicherort der Tabelle „ Department “ ändert, muss der Benutzer das Synonym „DeptEmpTable“ so bearbeiten, dass es auf den neuen Speicherort der Tabelle „ Department “ zeigt.
Und beachten Sie, dass Sie ohne die ALTER Synonym -Anweisung das Synonym löschen und mit dem alten Namen neu initialisieren müssen, aber auf den neuen Standort von Department verweisen.
Liste der Datenbankobjekte, für die der Benutzer Synonyme erstellen kann:
- Erweiterte gespeicherte Prozeduren
- SQL-Tabellenwertfunktion
- Gespeicherte SQL-Prozeduren
- Tabelle (benutzerdefiniert)
- Replikations-Filter-Verfahren
- SQL-Skalarfunktionen
- SQL-Inline-Tabellenwertfunktion
- Aussicht
Synonyme und Schemata
Angenommen, ein Benutzer möchte ein Synonym erstellen und hat ein Standardschema, das ihm nicht gehört. In diesem Fall können sie den Synonymnamen möglicherweise mit dem Scema identifizieren, das sie tatsächlich besitzen. Beispiel: Der Benutzer besitzt das Schema Resources , aber Material ist das Standardschema. Wenn der Benutzer ein Synonym erstellen möchte, muss er dem Synonym das Schema Resources voranstellen.
Weisen Sie Berechtigungen für Synonyme zu
Nur Mitglieder der Rollen db_owner oder db_ddladmin oder der Eigentümer des Synonyms dürfen einem Synonym Berechtigungen erteilen. Ein Benutzer kann alle oder beliebige Berechtigungen für ein Synonym verweigern, erteilen oder widerrufen.
Liste der Berechtigungen:
- LÖSCHEN
- EINFÜGUNG
- IN BESITZ NEHMEN
- DEFINITION ANZEIGEN
- KONTROLLE
- AUSFÜHREN
- AUSWÄHLEN
- AKTUALISIEREN
Arbeiten mit Synonymen
Benutzer arbeiten mit Synonymen in SEL SERVer 2019 oder T-SQL in SSMS. Gehen Sie wie folgt vor, um ein Synonym in SSMS mithilfe des Objekt-Explorers zu erstellen:
Um ein Synonym mit T-SQL zu erstellen, verwenden Sie die Syntax:
CREATE SYNONYM [schema_name_1.] synonym_name FOR <object> <object> ::= { server_name.[database_name].[schema_name_2].|database_name.[schema_name_2].|schema_name_2.] object_name}
Zum Beispiel:
USE AdventureWorks2019; GO CREATE SYNONYM MyAddressType FOR AdventureWorks2019.Person.AddressType; GO
Programmablaufanweisungen
Die verschiedenen Arten von Programmablaufanweisungen, die von T-SQL unterstützt werden, lauten wie folgt:
T-SQL-Flusssteuerungssprache
Die Ablaufsteuerung zeigt den Ablauf von SQL-Anweisungen, Befehlsblöcken, benutzerdefinierten Funktionen und gespeicherten Prozeduren.
Standardmäßig werden T-SQL-Anweisungen nacheinander ausgeführt. Der Programmfluss ermöglicht die Ausführung von Anweisungen in bestimmten, zusammenhängenden Situationen und wird zwischen Code mithilfe von Konstrukten generiert, die Programmiersprachen ähnlich sind.
Liste der Schlüsselwörter der Control-Of-Flow- Sprache:
- RÜCKKEHR
- WURF
- VERSUCHEN … FANGEN
- WARTEN AUF
- WÄHREND
- BEGINNEN … ENDE
- UNTERBRECHUNG
- TIẾP TỤC
- GOTO-Label
- ANSONSTEN
BEGINNEN … ENDE
Syntax:
BEGIN { sql_statement | statement_block } END
Zum Beispiel
USE AdventureWorks2019; GO BEGIN TRANSACTION; GO IF @@TRANCOUNT = 0 BEGIN SELECT FristName, MiddleName FROM Person.Person WHERE LastName = 'Andy'; ROLLBACK TRANSACTION; PRINT N'Rolling back the transaction two times would cause an error.'; END; ROLLBACK TRANSACTION; PRINT N'Rolled back the transcaction'; GO
ANSONSTEN
TRansact-SQL verlässt sich auf das IF-Schlüsselwort und die Bedingung wird nur ausgeführt, wenn sie erfüllt ist und wahr zurückgibt. Das Schlüsselwort ELSE ist optional in der T-SQL-Anweisung, die ausgeführt wird, wenn die IF-Bedingung nicht erfüllt ist und FALSE zurückgibt.
Syntax:
IF Boolean_expression {sql_statement | statement_block} [ELSE sql_statement | statement_block } ]
Zum Beispiel:
USE AdventureWorks2019; GO DECLARE @ListPrice money; SET @ListPrice = (SELECT MAX(p.ListPrice) FROM Production.Product AS p JOIN Production.ProductSubcategory AS s ON p.ProductSubcategoryID = s.ProductSubcategoryID WHERE s.[Name] = 'Mountain Bikes'); PRINT @ListPrice IF @ListPrice < 3000 PRINT 'All the products in this category can be purchased for an amount less than 3000' ELSE PRINT 'The prices for some products in this category exceed 3000'
WÄHREND
Die WHILE-Anweisung definiert die Bedingung für die Wiederholung der Blockausführung. Die Anweisung wird wiederholt ausgeführt, bis die angegebene Bedingung wahr zurückgibt. Die Ausführungsanweisung in der WHILE-Schleife kann mit den Schlüsselwörtern BREAK oder CONTINUE
Syntax:
WHILE Boolean_expression {sql_statement | statement_block | BREAK | CONTINUE}
Zum Beispiel:
DECLARE @flag int SET @flag = 10 WHILE (@flag <= 95) BEGIN IF @flag % 2 = 0 PRINT @flag SET @flag = @flag+ 1 CONTINUE; END; GO
FALL WENN
Syntax:
SELECT column_list, CASE column_name WHEN value1 then display1 WHEN value2 then display2 ... ELSE display END [AS alias] FROM relative_table [WHERE condition];
Zum Beispiel
SELECT studentid, studentname, GENDER = CASE gender WHEN 1 then 'Male' WHEN 0 then 'Female' ELSE 'Unknow' END FROM Student;