Heute lernen wir den allgemeinen Tabellenausdruck kennen, eine neue Funktion, die in SQL Server 2005 eingeführt wurde und auch in späteren Versionen verfügbar ist.
Allgemeiner Tabellenausdruck: - Allgemeiner Tabellenausdruck kann als temporäre Ergebnismenge definiert werden oder mit anderen Worten als Ersatz für Ansichten in SQL Server. Der allgemeine Tabellenausdruck ist nur in dem Anweisungsstapel gültig, in dem er definiert wurde, und kann nicht in anderen Sitzungen verwendet werden.
Syntax zum Deklarieren von CTE (Common Table Expression): -
with [Name of CTE]
as
(
Body of common table expression
)
Nehmen wir ein Beispiel: -
CREATE TABLE Employee([EID] [int] IDENTITY(10,5) NOT NULL,[Name] [varchar](50) NULL)
insert into Employee(Name) values('Neeraj')
insert into Employee(Name) values('dheeraj')
insert into Employee(Name) values('shayam')
insert into Employee(Name) values('vikas')
insert into Employee(Name) values('raj')
CREATE TABLE DEPT(EID INT,DEPTNAME VARCHAR(100))
insert into dept values(10,'IT')
insert into dept values(15,'Finance')
insert into dept values(20,'Admin')
insert into dept values(25,'HR')
insert into dept values(10,'Payroll')
Ich habe zwei Tabellen Mitarbeiter und Abteilung erstellt und 5 Zeilen in jede Tabelle eingefügt. Jetzt möchte ich diese Tabellen verbinden und eine temporäre Ergebnismenge erstellen, um sie weiter zu verwenden.
With CTE_Example(EID,Name,DeptName)
as
(
select Employee.EID,Name,DeptName from Employee
inner join DEPT on Employee.EID =DEPT.EID
)
select * from CTE_Example
Nehmen wir jede Zeile der Aussage einzeln und verstehen.
Um CTE zu definieren, schreiben wir die Klausel "with", dann geben wir dem Tabellenausdruck einen Namen, hier habe ich den Namen "CTE_Example" angegeben.
Dann schreiben wir "As" und schließen unseren Code in zwei Klammern (---) ein. Wir können mehrere Tabellen in den eingeschlossenen Klammern verbinden.
In der letzten Zeile habe ich "Select * from CTE_Example" verwendet. Wir verweisen auf den Common-Tabellenausdruck in der letzten Codezeile. Wir können also sagen, dass es sich um eine Ansicht handelt, in der wir die Ansicht in einer einzigen definieren und verwenden Batch und CTE werden nicht als permanentes Objekt in der Datenbank gespeichert. Aber es verhält sich wie eine Ansicht. Wir können Lösch- und Aktualisierungsanweisungen für CTE ausführen. Dies hat direkte Auswirkungen auf die referenzierte Tabelle, die in CTE verwendet wird. Nehmen wir ein Beispiel, um diese Tatsache zu verstehen.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
In der obigen Anweisung löschen wir eine Zeile aus CTE_Example und sie löscht die Daten aus der referenzierten Tabelle "DEPT", die im CTE verwendet wird.