Sql Serverda sorgu sonucu aldıgınız verileri biyerde nasıl depolarsınız sorusuna genelde gelen ilk cevap Temp Table oluştururum şeklinde olur Sql 2000 den gelen en klasik kullanma yöntemidir aslında bu.

Ama birçoğumuz Sql 2005 in yeni bir özelliğini bilmediginden bu ekilde kullanmaya devam ediyoruz.

Bu yeni özelliğimiz Sql Serverin Table tipinde bir veri yapısı saglaması.

Sql 200 de Temp Db lerde söle kullanırız

SELECT * INTO #TempDB FROM
(
  Select * from Contact
)

DROP TABLE #TempDB

burda drop table i unutmamız ciddi performans sorunları çıkartır.

 #TempDB yapısında aldıgı sorgu sonucunu harddikste biyere yazması yatar aslında .

Bunun Alternatifi ise artık Table tipinde değiken

peki en büyük artısı ne

1-Harddiske değil memory'e yazıyor verileriBöylece hızı epey artıyor.(Hepinizin gözlerinin parladıgına eminim :) )

2- Drop Table yazmamız gerekmiyor

3. Store procedurlerle kullandıgında yeniden derlemeye gerek kalmıyor

Dezavantajlarıda var tabi
1. Nekadar büyük data atarsanız okadar memory den yemeye başlar.Performans sistem kaynaklarınıza göre tam tersi sonucta verebilir.
2. İndex koyamıyoruz

Peki nasıl kullanırız

DECLARE @ContactTable TABLE(Ad NVARCHAR(255),Soyad NVARCHAR(255))

INSERT INTO @reportTable
    SELECT Ad,Soyad from Contact


select * from @ContactTable

 

-------------------------------------------

MSDN den bir örnek 

USE AdventureWorks;
GO
DECLARE @MyTableVar table(
EmpID int NOT NULL,
OldVacationHours int,
NewVacationHours int,
ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25 
OUTPUT INSERTED.EmployeeID,
DELETED.VacationHours,
INSERTED.VacationHours,
INSERTED.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
--Display the result set of the table.
--Note that ModifiedDate reflects the value generated by an
--AFTER UPDATE trigger.
SELECT TOP (10) EmployeeID, VacationHours, ModifiedDate
FROM HumanResources.Employee;