🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / MSSQL RMOS / geçici sanal tablo oluşturmak ve procedürden dönen değer ile kullanmak

1-) MSSQL RMOS - geçici sanal tablo oluşturmak ve procedürden dönen değer ile kullanmak

 

bir procedüreden sanal tabloya veri aktarmak ve kullanmak

 

create proc [dbo].[deneme2] as begin

declare @t table(col1 varchar(10), col2 float, col3 float, col4 float,col5 float)

insert @t values('a', 3,3,3,1)

insert @t values('b', 4,4,4,1)

 

select * from @t

end

 

 

--exec deneme2

 

 

create table #deneme5(col1 nvarchar(50),col2 int,col3 int, col4 int, col5 int)

insert into #deneme5

exec deneme2

 

select * from #deneme5

drop table #deneme5

 

 

 

 

 

SQL Server da Temporary (Geçici) Tablo Kullanmak

SQL Server developerlarin isini çok kolaylastiran ve kullanimi kolay temporary(geçici) tablo yapisini destekler. Geçici tablolar çalisma aninda olusturulur ayrica normal bir tabloda yapabilecegimiz tüm islemleri temp tablolarda da yapabiliriz. Temp Tablolar tempdb veritabaninda saklanirlar.

Bu makalemiz de temp tablolarin kullanimi ile ilgili giris seviyesinde hizli bir balis atacagiz.

Temp Tablo Tipleri

SQL Server iki farkli temp tablo tipi saglar.

  • Local Temp Tablo
  • Global Temp Tablo

Local Temp Tablo

Local Temp tablolar sadece tabloyu olusturan kullanicinin, olusturmak için kullandigi connection üzerin de geçerlidir. Kullanici baglantiyi kapattigi anda otomatik olarak silinir. Local Temp tablo tanimlamak için tablo isminin önüne # isareti koymamiz yeterlidir.

.

Global Temp Table

Global olarak temp tablo tanimlamak için ## karakterlerini tablo isminden önce eklememiz yeterlidir. Global temp tablolar bir connection içinde tanimlandigi anda, normal tablolar gibi tüm kullanicilar ve connectionlar içinde kullanilabilir hale gelirler. Global tabloyu olusturdugunuz connection kapatilana kadar bu tablo var olmaya devam eder.

SQL Serverda Temp Tablo Olusturmak

Yukarida anlattigimiz iki farkli tipteki temp tablolarin nasil olusturulup kullanilacagini asagidaki örneklere bakarak anlamaya çalisalim

Local Temp Tablo

CREATE TABLE #LocalTempTablo

(

ID int,

Ad varchar(20),

Soyad varchar(20)

)

 

Yukaridaki sorgu ile tempdb içinde bir geçici(temp) tablo olusturmus olduk, normal bir tabloya insert/select yapiyormus gibi temp tabloya da asagidaki gibi insert/select yapabiliriz.

INSERT

insert into #LocalTempTablo values ( 1, 'Sabri','KUNT');

 

SELECT

select * from #LocalTempTablo

 

Select Sonucu

ID          Ad                   Soyad

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

1           Sabri                KUNT

 

(1 row(s) affected)

 

Yukariki scriptleri çalistirdiktan baska bir sorgu penceresinde select veya insert sorgusu çalistirirsaniz asagidaki hatayi alirsiniz.

Msg 208, Level 16, State 0, Line 1

Invalid object name '#LocalTempTablo'

 

Yukaridaki hatanin sebebi, olusturdugumuz temp tablonun sadece olusturuldugu connection içinde geçerli olmasidir.

Global Temp Tablo

Global bir temp tablo olusturmak için iki adet # karakteri kullaniyoruz (##). Global temp tablolar olusturuldugu connection aktif oldugu sürece tüm kullanicilar ve connectionlarda kullanilabilir demistir. Bir örnekle daha iyi anlayalim.

CREATE TABLE ##GlobalTempTablo

(

ID int,

Ad varchar(20),

Soyad varchar(20)

)

 

INSERT ve SELECT Sorgusu

insert into ##GlobalTempTablo values ( 1, 'Sabri','KUNT');

 

select * from ##GlobalTempTablo

 

Yukaridaki select ve insert sorgusunu istediginiz herhangi bir sorgu ekraninda çalistirabilirsiniz. Ilk olusturdugunuz connection açik oldugu sürece heryerden bu tablolara erisim yapilabilir. Bunu kendinizde deneyerek görebilirsiniz.

SQL Server Temp tablolari asagida da görüldügü gibi tempdb veritabanin da tutar.

.

Temp Tablolar Nerede ve Ne Amaçla Kullanilir

Büyük veriler ile çalisirken bazen bir sorgu sonucunda dönen kayitlari baska bir sorguda join islemine tabi tutariz. Temp tablo kullanmak yerine iç içe select yazabiliriz fakat bu büyük kayitlarda bazen performans sikintisi ve komplex sqllere sebeb olur. Bu yüzden belirli bir sorgu sonucunu temp bir tabloya atar ve bu tabloyuda baska bir sorguda kullanabiliriz. Bununla ilgili olarak asagidaki örnegi inceleyebilirsiniz.

select

top 100 CustomerKey,FirstName,LastName

into #temp

from dbo.DimCustomer

 

select

      ProductKey,OrderDateKey

      ,s.CustomerKey,SalesOrderNumber

      ,UnitPrice from FactInternetSales s

inner join #temp t on s.CustomerKey = t.CustomerKey

 

Alternatif Yöntem : Tablo Degiskeni

Temp tablo olusturmak için alternatif diger yöntem tablo degiskeni tanimlamaktir. Nasil tanimlandigi ve kullanildigini asagida görebilirsiniz.

Declare @TempTableVariable TABLE(

ID int,

Ad varchar(20),

Soyad varchar(20)

)

 

insert into @TempTableVariable values ( 1, 'Sabri','KUNT');

insert into @TempTableVariable values ( 1, 'Ali','RÜZGAR');

 

select * from @TempTableVariable

 

Ne zaman Temp Tablo Ne zaman Tablo Degiskeni Kullanmaliyiz

  • Eger 100 kayitdan daha az kayit ile çalisacaksaniz tablo degiskeni kullanin, diger türlü temp tablo kullanmalisiniz. Bunun sebebi SQL server tablo degiskeni için istatistik olusturmaz.
  • Eger index olusturmaniz gerekiyor ise temp tablo kullanin.

 

kaynak : http://www.yazilimmutfagi.com/index.php/2012/03/05/sql-server-da-temporary-gecici-tablo-kullanmak/

 

 2021 Aralık 08 Çarşamba
 453