Aujourd'hui, nous allons en apprendre davantage sur l'expression de table commune qui est une nouvelle fonctionnalité introduite dans SQL Server 2005 et également disponible dans les versions ultérieures.
Expression de table commune: - L'expression de table commune peut être définie comme un jeu de résultats temporaire ou en d'autres termes, c'est un substitut des vues dans SQL Server. L'expression de table commune n'est valide que dans le lot d'instructions où elle a été définie et ne peut pas être utilisée dans d'autres sessions.
Syntaxe de déclaration de CTE (expression de table commune): -
with [Name of CTE]
as
(
Body of common table expression
)
Prenons un exemple: -
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')
J'ai créé deux tables employé et département et inséré 5 lignes dans chaque table. Maintenant, je voudrais rejoindre ces tables et créer un jeu de résultats temporaire pour l'utiliser davantage.
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
Permet de prendre chaque ligne de l'énoncé un par un et de comprendre.
Pour définir CTE, nous écrivons la clause "with", puis nous donnons un nom à l'expression de table, ici j'ai donné le nom "CTE_Example"
Ensuite, nous écrivons "As" et mettons notre code entre deux crochets (---), nous pouvons joindre plusieurs tables entre crochets.
Dans la dernière ligne, j'ai utilisé "Select * from CTE_Example", nous faisons référence à l'expression de la table Common dans la dernière ligne de code, nous pouvons donc dire que c'est comme une vue, où nous définissons et utilisons la vue en une seule batch et CTE n'est pas stocké dans la base de données en tant qu'objet permanent. Mais il se comporte comme une vue. nous pouvons effectuer une instruction de suppression et de mise à jour sur CTE et cela aura un impact direct sur la table référencée qui est utilisée dans CTE. Prenons un exemple pour comprendre ce fait.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
Dans l'instruction ci-dessus, nous supprimons une ligne de CTE_Example et cela supprimera les données de la table référencée "DEPT" qui est utilisée dans le CTE.