{"id":143,"date":"2012-03-05T10:03:00","date_gmt":"1970-01-01T00:00:00","guid":{"rendered":"http:\/\/www.yazilimmutfagi.com\/?p=143"},"modified":"2012-03-05T10:03:00","modified_gmt":"1970-01-01T00:00:00","slug":"sql-server-da-temporary-gecici-tablo-kullanmak","status":"publish","type":"post","link":"http:\/\/www.yazilimmutfagi.com\/index.php\/2012\/03\/05\/sql-server-da-temporary-gecici-tablo-kullanmak\/","title":{"rendered":"SQL Server da Temporary (Ge\u00e7ici) Tablo Kullanmak"},"content":{"rendered":"\n<h1>SQL Server da Temporary (Ge&ccedil;ici) Tablo Kullanmak<\/h1>\n<p>SQL Server developerlarin isini &ccedil;ok kolaylastiran ve kullanimi kolay temporary(ge&ccedil;ici) tablo yapisini destekler. Ge&ccedil;ici tablolar &ccedil;alisma aninda olusturulur ayrica normal bir tabloda yapabilecegimiz t&uuml;m islemleri temp tablolarda da yapabiliriz. Temp Tablolar tempdb veritabaninda saklanirlar.<\/p>\n<p>Bu makalemiz de temp tablolarin kullanimi ile ilgili giris seviyesinde hizli bir balis atacagiz.<\/p>\n<h2>Temp Tablo Tipleri<\/h2>\n<p>SQL Server  iki farkli temp tablo tipi saglar.<\/p>\n<ul>\n    <li>Local Temp Tablo<\/li>\n    <li>Global Temp Tablo<\/li>\n<\/ul>\n<h3>Local Temp Tablo<\/h3>\n<p>Local Temp tablolar sadece tabloyu olusturan kullanicinin, olusturmak i&ccedil;in kullandigi connection &uuml;zerin de ge&ccedil;erlidir. Kullanici baglantiyi kapattigi anda otomatik olarak silinir. Local Temp tablo tanimlamak i&ccedil;in tablo isminin &ouml;n&uuml;ne # isareti koymamiz yeterlidir.<\/p>\n<a href='www.yazilimmutfagi.com'>.<\/a>\n<h3>Global Temp Table<\/h3>\n<p>Global olarak temp tablo tanimlamak i&ccedil;in ## karakterlerini tablo isminden &ouml;nce eklememiz yeterlidir. Global temp tablolar bir connection i&ccedil;inde tanimlandigi anda, normal tablolar gibi t&uuml;m kullanicilar ve connectionlar i&ccedil;inde kullanilabilir hale gelirler. Global tabloyu olusturdugunuz connection kapatilana kadar bu tablo var olmaya devam eder.<\/p>\n<h2>SQL Serverda Temp Tablo Olusturmak<\/h2>\n<p>Yukarida anlattigimiz iki farkli tipteki temp tablolarin nasil olusturulup kullanilacagini asagidaki &ouml;rneklere bakarak anlamaya &ccedil;alisalim<\/p>\n<h3>Local Temp Tablo<\/h3>\n<pre class=\"brush:sql\">\nCREATE TABLE #LocalTempTablo\n(\n\tID int,\n\tAd varchar(20), \n\tSoyad varchar(20)\n)\n<\/pre>\n<p>Yukaridaki sorgu ile tempdb i&ccedil;inde bir ge&ccedil;ici(temp) tablo olusturmus olduk, normal bir tabloya insert\/select yapiyormus gibi temp tabloya da asagidaki gibi insert\/select yapabiliriz.<\/p>\n<h4>INSERT<\/h4>\n<pre class=\"brush:sql\">\ninsert into #LocalTempTablo values ( 1, 'Sabri','KUNT');\n<\/pre>\n<h4>SELECT<\/h4>\n<pre class=\"brush:sql\">\nselect * from #LocalTempTablo \n<\/pre>\n<h4>Select Sonucu<\/h4>\n<pre class=\"brush:sql\">\nID          Ad                   Soyad\n----------- -------------------- --------------------\n1           Sabri                KUNT\n\n(1 row(s) affected)\n<\/pre>\n<p>Yukariki scriptleri &ccedil;alistirdiktan baska bir sorgu penceresinde select veya insert sorgusu &ccedil;alistirirsaniz asagidaki hatayi alirsiniz.<\/p>\n<pre class=\"brush:sql\">\nMsg 208, Level 16, State 0, Line 1\nInvalid object name '#LocalTempTablo'\n<\/pre>\n<p>Yukaridaki hatanin sebebi, olusturdugumuz temp tablonun sadece olusturuldugu connection i&ccedil;inde ge&ccedil;erli olmasidir.<\/p>\n<h3>Global Temp Tablo<\/h3>\n<p>Global bir temp tablo olusturmak i&ccedil;in iki adet # karakteri kullaniyoruz (##). Global temp tablolar olusturuldugu connection aktif oldugu s&uuml;rece t&uuml;m kullanicilar ve connectionlarda kullanilabilir demistir. Bir &ouml;rnekle daha iyi anlayalim.<\/p>\n<pre class=\"brush:sql\">\nCREATE TABLE ##GlobalTempTablo\n(\n\tID int,\n\tAd varchar(20), \n\tSoyad varchar(20)\n)\n<\/pre>\n<h4>INSERT ve SELECT Sorgusu<\/h4>\n<pre class=\"brush:sql\">\ninsert into ##GlobalTempTablo values ( 1, 'Sabri','KUNT');\n\nselect * from ##GlobalTempTablo \n<\/pre>\n<p>Yukaridaki select ve insert sorgusunu istediginiz herhangi bir sorgu ekraninda &ccedil;alistirabilirsiniz. Ilk olusturdugunuz connection a&ccedil;ik oldugu s&uuml;rece heryerden bu tablolara erisim yapilabilir. Bunu kendinizde deneyerek g&ouml;rebilirsiniz.<\/p>\n<p>SQL Server Temp tablolari asagida da g&ouml;r&uuml;ld&uuml;g&uuml; gibi tempdb veritabanin da tutar.<\/p>\n<p><img decoding=\"async\" alt=\"temporary table in sql server\" src=\"http:\/\/www.yazilimmutfagi.com\/yuklenendosyalar\/image\/sabri\/sql_temptable.png\" \/><\/p>\n<a href='www.yazilimmutfagi.com'>.<\/a>\n<h2>Temp Tablolar Nerede ve Ne Ama&ccedil;la Kullanilir<\/h2>\n<p>B&uuml;y&uuml;k veriler ile &ccedil;alisirken bazen bir sorgu sonucunda d&ouml;nen kayitlari baska bir sorguda join islemine tabi tutariz. Temp tablo kullanmak yerine i&ccedil; i&ccedil;e select yazabiliriz fakat bu b&uuml;y&uuml;k kayitlarda bazen performans sikintisi ve komplex sqllere sebeb olur. Bu y&uuml;zden belirli bir sorgu sonucunu temp bir tabloya atar ve bu tabloyuda baska bir sorguda kullanabiliriz. Bununla ilgili olarak asagidaki &ouml;rnegi inceleyebilirsiniz.<\/p>\n<pre class=\"brush:sql\">\nselect \ntop 100 CustomerKey,FirstName,LastName \ninto #temp\nfrom dbo.DimCustomer\n\nselect \n      ProductKey,OrderDateKey\n      ,s.CustomerKey,SalesOrderNumber\n      ,UnitPrice from FactInternetSales s\ninner join #temp t on s.CustomerKey = t.CustomerKey\n<\/pre>\n<h3>Alternatif Y&ouml;ntem : Tablo Degiskeni<\/h3>\n<p>Temp tablo olusturmak i&ccedil;in alternatif diger y&ouml;ntem tablo degiskeni tanimlamaktir. Nasil tanimlandigi ve kullanildigini asagida g&ouml;rebilirsiniz.<\/p>\n<pre class=\"brush:sql\">\nDeclare @TempTableVariable TABLE(\n\tID int,\n\tAd varchar(20), \n\tSoyad varchar(20)\n)\n\ninsert into @TempTableVariable values ( 1, 'Sabri','KUNT');\ninsert into @TempTableVariable values ( 1, 'Ali','R&Uuml;ZGAR');\n\nselect * from @TempTableVariable \n<\/pre>\n<h3>Ne zaman Temp Tablo Ne zaman Tablo Degiskeni Kullanmaliyiz<\/h3>\n<ul>\n    <li>Eger 100 kayitdan daha az kayit ile &ccedil;alisacaksaniz tablo degiskeni kullanin, diger t&uuml;rl&uuml; temp tablo kullanmalisiniz. Bunun sebebi SQL server tablo degiskeni i&ccedil;in istatistik olusturmaz.<\/li>\n    <li>Eger index olusturmaniz gerekiyor ise temp tablo kullanin.<\/li>\n<\/ul>\n<a href='www.yazilimmutfagi.com'>.<\/a>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server developerlarin isini &#231;ok kolaylastiran ve kullanimi kolay temporary(ge&#231;ici) tablo yapisini destekler. Ge&#231;ici tablolar &#231;alisma aninda olusturulur ayrica normal bir tabloda yapabilecegimiz t&#252;m islemleri temp tablolarda da yapabiliriz. Temp Tablolar tempdb veritabaninda saklanirlar.<\/p>\n","protected":false},"author":517,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[422],"tags":[5675,5184,5084,4333,4442],"_links":{"self":[{"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/143"}],"collection":[{"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/users\/517"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/comments?post=143"}],"version-history":[{"count":0,"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/143\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/media?parent=143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/categories?post=143"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/tags?post=143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}