@ArmanAbi
#TSQL
#TempTable
#TableVariable
#CommonTableExpression
در SQLخیلی از مواقع نیاز هست که ما یک ساختار یا جدول موقت برای نگهداری رکورد ها داشته باشیم.
به عنوان مثال ممکنه در یک استور پروسیجر (SP) لازم باشه که رکوردهای یک جدول رو واکشی کنیم و در ابتدای SP نگهداری کنیم و در ادامه از این رکوردها برای عملیات Join و ... استفاده کنیم.
سه مدل برای نگهداری رکوردها به صورت موقت عبارتند از:
1- Temp Table
2-Table Variable
3-Common Table Expression (CTE)
در ادامه از هر کدام یک مثال ساده مطرح می کنیم:
CTE:
;With CTE1(Fname,Lname, Age)--Column names for CTE, which are optional
AS
(
SELECT Addr.Address, user.Name, user.Age from Address Addr
INNER JOIN User user ON user.ID = Addr.userID
)
SELECT * FROM CTE1 —Using CTE
WHERE CTE1.Lname Like '%احمدی%'
ORDER BY CTE1.NAME
Temp Table:
CREATE TABLE #LocalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'testName','testAddress');
GO
Select * from #LocalTemp
Table Variable:
DECLARE @TProduct TABLE
(
No INT IDENTITY(1,1),
ProductId INT,
Qty INT
)
—Insert data to Table variable @Product
INSERT INTO @TProduct(ProductId,Qty)
SELECT DISTINCT ProductID, Qty FROM ProductsSales ORDER BY ProductID ASC
—Select data
Select * from @TProduct
هر کدام از سه ساختار معرفی شده، دارای مزایا و معایب خاص خود هستند.
مثلا Temp Table و Table Variable در Tempdb ایجاد می شوند در حالیکه CTE در حافظه ایجاد می شود.
دو ساختار Tem Table , Table Variable تفاوت های زیادی اط نظر ایجاد ایندکس، Statistics ,Scopet و .... دارند.
اگر کارایی کوئری برای شما اهمیت زیادی دارد. باید در انتخاب هر یک از این سه ساختار، متناسب با نیاز خود استفاده کنید
@ArmanAbi
#TSQL
#TempTable
#TableVariable
#CommonTableExpression
در SQLخیلی از مواقع نیاز هست که ما یک ساختار یا جدول موقت برای نگهداری رکورد ها داشته باشیم.
به عنوان مثال ممکنه در یک استور پروسیجر (SP) لازم باشه که رکوردهای یک جدول رو واکشی کنیم و در ابتدای SP نگهداری کنیم و در ادامه از این رکوردها برای عملیات Join و ... استفاده کنیم.
سه مدل برای نگهداری رکوردها به صورت موقت عبارتند از:
1- Temp Table
2-Table Variable
3-Common Table Expression (CTE)
در ادامه از هر کدام یک مثال ساده مطرح می کنیم:
CTE:
;With CTE1(Fname,Lname, Age)--Column names for CTE, which are optional
AS
(
SELECT Addr.Address, user.Name, user.Age from Address Addr
INNER JOIN User user ON user.ID = Addr.userID
)
SELECT * FROM CTE1 —Using CTE
WHERE CTE1.Lname Like '%احمدی%'
ORDER BY CTE1.NAME
Temp Table:
CREATE TABLE #LocalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'testName','testAddress');
GO
Select * from #LocalTemp
Table Variable:
DECLARE @TProduct TABLE
(
No INT IDENTITY(1,1),
ProductId INT,
Qty INT
)
—Insert data to Table variable @Product
INSERT INTO @TProduct(ProductId,Qty)
SELECT DISTINCT ProductID, Qty FROM ProductsSales ORDER BY ProductID ASC
—Select data
Select * from @TProduct
هر کدام از سه ساختار معرفی شده، دارای مزایا و معایب خاص خود هستند.
مثلا Temp Table و Table Variable در Tempdb ایجاد می شوند در حالیکه CTE در حافظه ایجاد می شود.
دو ساختار Tem Table , Table Variable تفاوت های زیادی اط نظر ایجاد ایندکس، Statistics ,Scopet و .... دارند.
اگر کارایی کوئری برای شما اهمیت زیادی دارد. باید در انتخاب هر یک از این سه ساختار، متناسب با نیاز خود استفاده کنید
@ArmanAbi