วันนี้เราจะเรียนรู้เกี่ยวกับนิพจน์ตารางทั่วไปซึ่งเป็นคุณสมบัติใหม่ซึ่งเปิดตัวใน SQL Server 2005 และมีให้ในรุ่นต่อ ๆ ไปเช่นกัน
นิพจน์ตารางทั่วไป: - นิพจน์ตารางทั่วไปสามารถกำหนดเป็นชุดผลลัพธ์ชั่วคราวหรือกล่าวอีกนัยหนึ่งคือแทนที่มุมมองใน SQL Server นิพจน์ตารางทั่วไปใช้ได้เฉพาะในชุดคำสั่งที่กำหนดไว้และไม่สามารถใช้ในเซสชันอื่นได้
ไวยากรณ์ของการประกาศ CTE (นิพจน์ตารางทั่วไป): -
with [Name of CTE]
as
(
Body of common table expression
)
ให้ยกตัวอย่าง: -
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')
ฉันได้สร้างพนักงานสองตารางและ Dept และแทรก 5 แถวในแต่ละตาราง ตอนนี้ฉันต้องการเข้าร่วมตารางเหล่านี้และสร้างชุดผลลัพธ์ชั่วคราวเพื่อใช้งานต่อไป
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
ให้รับแต่ละบรรทัดของคำสั่งทีละรายการและเข้าใจ
ในการกำหนด CTE เราเขียนประโยค "with" จากนั้นเราตั้งชื่อให้กับนิพจน์ตารางที่นี่ฉันได้ตั้งชื่อเป็น "CTE_Example"
จากนั้นเราเขียน "เป็น" และใส่รหัสของเราในสองวงเล็บ (---) เราสามารถเข้าร่วมหลายตารางในวงเล็บปิด
ในบรรทัดสุดท้ายฉันใช้ "เลือก * จาก CTE_Example" เราอ้างอิงนิพจน์ตารางทั่วไปในบรรทัดสุดท้ายของรหัสดังนั้นเราจึงสามารถพูดได้ว่ามันเป็นมุมมองที่เรากำหนดและใช้มุมมองในที่เดียว batch และ CTE ไม่ได้ถูกจัดเก็บในฐานข้อมูลเป็นวัตถุถาวร แต่มันทำตัวเหมือนเป็นมุมมอง เราสามารถดำเนินการลบและอัปเดตคำสั่งใน CTE และจะมีผลกระทบโดยตรงต่อตารางอ้างอิงที่ใช้ใน CTE ลองยกตัวอย่างเพื่อทำความเข้าใจความจริงข้อนี้
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
ในคำสั่งด้านบนเราจะลบแถวออกจาก CTE_Example และมันจะลบข้อมูลจากตารางอ้างอิง "DEPT" ที่ใช้ใน CTE