Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Ağustos 2017  >>
PaSaÇaPeCuCuPa
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910
Keywords

SSDT makale serime bir süre ara vermiştim. Bugün anlatacağım SSDT’de bir tablo içindeki veriler üzerinden Insert Script’i oluşturma özelliği ile makale serime devam ediyorum.

[more]

SQL Server 2012 daha doğrusu SSDT’den önce bu işi SSMS üzerinden Generate Scripts özelliği ile yapabiliyorduk. Hatta bu konu üzerine şu makaleyi kaleme almıştım.

SQL Server 2008 de Bir Table daki Verilerden Insert Script i Oluşturma

SQL Server 2012 ile beraber artık bu ihtiyacımızı SSDT ile yapabiliriz. Çünkü SSDT makale serimin ilk makalesinde dediğim gibi artık developerlar bütün işlemlerini SSDT üzerinden yapacak ve başka bir tool’a ihtiyaç duymayacaklar.

Şimdi adım adım bir tablo üzerinden nasıl insert script’i oluşturabileceğimize bakalım.

SQL Server Object Explorer’dan insert script’i oluşturmak istediğimiz tabloyu bulup sağ tıklayarak view data butonuna basalım. Ben bu örneğim için AdventureWorks DB’sinde bulunan Person.Address tablosunu kullanacağım.

1

Gelen ekranda ilk olarak yapmamız gereken “1000” olarak seçili Max Rows kısmını değiştirmek. Eğer tüm veriler için insert script’i oluşturacak isek bu kısmı All olarak değiştirmeliyiz.

2

Max Rows seçimini yaptıktan sonra artık insert script’i oluşturabiliriz. Bunun için Max Rows kısmının sağında bulunan script butonunu tıklıyoruz.

3

Script butonuna bastığımızda ilgili kayıtlar için insert script’leri yeni bir Query ekranında açılacaktır.

4

Eğer insert script’lerinin yeni bir Query ekranında değil de direk dosya olarak kaydedilmesini istiyorsak bunun için Script to File butonunu kullanabiliriz.

5

Son olarak şu eklemeyi de yapıp bu makaleyi noktalayalım. View Data ekranında kayıtlar üzerinde değişiklik yapılabilir ya da yeni kayıt girilebilir veya silinebilir. Bu işlemler için de SSDT’yi kullanabiliriz.

Bir sonraki SSDT makalesinde görüşmek üzere.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Bildiğiniz gibi 8 Mart 2012 tarihinde SQL Server sanal lansmanı tüm dünya ile aynı anda Türkiye’de de gerçekleştirildi.

Lansman kapsamında ben de “SQL Server 2012 Yüksek Erişilebilirlik-AlwaysOn” konulu bir sunum yaptım.

Bu sunumun video kaydına aşağıda erişebilirsiniz.

Lansman kapsamındaki diğer sunumlara ise aşağıdaki url’den erişebilirsiniz.

http://www.sqlserverlaunch.com/tur/ww_Agenda

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Türkiye’de ilk kez 31 Mart 2012 Cumartesi günü MS İstanbul ofisinde düzenlenen SQLSaturday etkinliğindeki sunumların video kayıtlarına aşağıdaki linkten erişebilirsiniz.

http://www.sqlserveronculeri.com/5/Activity/395/sqlsaturday-#128-istanbul-etkinligi-sunum-kayitlari.aspx

Birbirinden değerli konuşmacıların workshop formatındaki sunumlarını izlemenizi kesinlikle tavsiye ederim.

Not: Videoları izleyebilmek için SQL Server Öncüleri web sayfasına üye olmanız gerekmektedir.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


19.04.2012 tarihinde (dün) SQL Server Öncüleri önderliğinde gerçekleştirmiş olduğum SQL Server 2012 ile Gelen Yeni Özellikler başlıklı webcast’imin videosuna ve diğer dosyalarına aşağıdan erişebilirsiniz.

Scriptler

Sunum

Video

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba,

19 Nisan 2012 Perşembe günü yapacağım webcast’in duyurusunu yapmak istiyorum.

SQL Server Öncüleri bünyesinde vereceğim SQL Server 2012 ile Gelen Yeni Özellikler başlıklı webcast’im 19.04.2012 tarihinde 10:00-11:00 saatleri arasında gerçekleşecek.

Aşağıdaki url’i kullanarak vereceğim bu webcast’e katılabilirsiniz.

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502479&Culture=TR-TR

http://www.sqlserveronculeri.com/10/EventSchedule/342/sql-server-2012-ile-gelen-yeni-ozellikler-i-web-semineri.aspx

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Bildiğiniz gibi her SQL komutu çalıştırıldığında ilgili komut için bir Query Plan oluşturulur ve Plan Cache’de saklanır. Eğer ilgili sorgu parameterize edilebilen bir sorgu ise (Stored Procedure gibi) ve bu sorgu için daha önce bir Query Plan oluşturulduysa, tekrar bir Query Plan oluşturulmaz ve daha önce Plan Cache’de saklanan Query Plan kullanılır.

Query Plan oluşturulma işlemi masraflı bir işlemdir. Bu yüzden oluşturulmuş Query Plan’larının saklanıp kullanılarak tekrar tekrar Query Plan oluşturulmaması performans açısından önemli bir durumdur.

İşte bu bakış açısıyla exec ve sp_executesql komutları ile Dynamic SQL kullanımında ortaya çıkan farklılıkları bu makalede inceleyip, sp_ExecuteSQL’in exec yerine neden tercih edilmesi gerektiğini örnekler ile görüyor olacağız.

[more]

Her iş gereksinimi sabit SQL komutları ile Stored Procedure’lere gömülemeyebilir. Örneğin parametre olarak verilen tablo adına çekilecek sorguda Dynamic SQL kullanma zorunluluğumuz ortaya çıkabilir.

Ya da başka bir örnek verecek olursak; sorguda bulunan where bloğunda kullanılacak ifadeler duruma göre farklılık gösterebilir ya da parametre olarak gönderilebilir.

İşte böyle bir durumda sabit bir SQL ifadesi yerine Dynamic SQL kullanmamız gerekebilir. Peki ama komut olarak Exec mi yoksa sp_executeSQL komutunu mu kullanmalıyız?

Bu soruya bir örnek ile cevap bulmaya çalışalım.

Örneğimizde kullandığımız where bloğu değişkenden alındığı için Dynamic SQL kullanmak zorunda kalıyoruz. İlk blokta exec komutu ile kullanıp Cache’lenen Plan’larının tekrar kullanılmadığını göreceğiz.

İkinci örnekte ise aynı işlemi sp_executesql ile yapacağız ve cache’lenen planların tekrar kullanıldığını göreceğiz.

Exec ile Dynamic SQL Kullanımı

--İşlemlere başlamadan önce Plan Cache'i temizliyoruz.
--DİKKAT:Bu işlemi production ortamında YAPMAYINIZ!!
dbcc freeproccache

--exec komutu ile Dynamic SQL kullanıyoruz.
declare @str varchar(max)='',
		@param1 varchar(50)='',
		@param2 varchar(50)=''
declare @strin varchar(50)
set @param1='1'
set @param2='2'
set @str='select * from AdventureWorks.Person.Address where AddressID in ('+@param1+','+@param2+')'
exec(@str)

--Cache'lenen query Planlara bakalım.
select st.text,* 
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
where (st.text like '%select * from AdventureWorks%')
and st.text not like '%select st.text%'

--exec komutu ile aynı sorguyu tekrar çekiyoruz
declare @str varchar(max)='',
		@param1 varchar(50)='',
		@param2 varchar(50)=''
declare @strin varchar(50)
set @param1='3'
set @param2='4'
set @str='select * from AdventureWorks.Person.Address where AddressID in ('+@param1+','+@param2+')'
exec(@str)

--Cache'lenen query Planlara bakalım.
select st.text,* 
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
where (st.text like '%select * from AdventureWorks%')
and st.text not like '%select st.text%'

--Her 2 sorgu için 2 ayrı plan oluşturulduğunu görüyoruz.

 

1

sp_executeSQL ile Dynamic SQL Kullanımı

Şimdi aynı işlemi sp_executeSQL ile tekrarlayalım.

--İşlemlere başlamadan önce Plan Cache'i temizliyoruz.
--DİKKAT:Bu işlemi production ortamında YAPMAYINIZ!!
dbcc freeproccache

--sp_executesql ile aynı işlemi yapalım
--sp_executesql 1
declare @param1 int,
	    @param2 int
set @param1=1
set @param2=2
exec sp_executesql N'select * from AdventureWorks.Person.Address where AddressID in (@1,@2)'
		,N'@1 int, @2 int'
		,@param1, @param2
		
--Cache'lenen query Planlara bakalım.
select st.text,* 
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
where (st.text like '%select * from AdventureWorks%')
and st.text not like '%select st.text%'		

--sp_executesql 2
declare @param1 int,
	    @param2 int
set @param1=3
set @param2=4
exec sp_executesql N'select * from AdventureWorks.Person.Address where AddressID in (@1,@2)'
		,N'@1 int, @2 int'
		,@param1, @param2
		
--Cache'lenen query Planlara bakalım.
select st.text,* 
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
where (st.text like '%select * from AdventureWorks%')
and st.text not like '%select st.text%'		

--Aynı Query Plan'ın 2 defa kullanıldığını
--tekrar yeni bir Query Plan oluşturulmadığını görüyoruz

 

2

Gördüğünüz gibi her 2 sorgu için ayrı ayrı Query Plan oluşturulmadı ve aynı Query Plan kullanıldı.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Geçen Cumartesi düzenlediğimiz SQLSaturday etkinliğinin yoğunluğundan dolayı bu duyuruyu yazmaya anca fırsat bulabiliyorum.

1 Nisan 2012 itibarıyla SQL Server 2012 RTM public available oldu. Aşağıdaki adresten SQL Server 2012’yi indirebilirsiniz.

http://www.microsoft.com/sqlserver/en/us/get-sql-server/try-it.aspx

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Yoğun ilgi ile karşılanan ve 700 civarı kayıt alan Türkiye’deki ilk SQLSaturday etkinliği 31 Mart 2012 Cumartesi günü Microsoft İstanbul Ofisinde gerçekleşti.

image

SQL Server Öncüleri’inin öncülüğünde gerçekleşen etkinlikte eğitim formatında 6 sunum yapıldı. Ben kendi sunumumda DMV konusunu işledim.

image

10 saatlik maratona 200+ gibi rekor sayıda katılım gerçekleşti.

image

Microsoft Türkiye ekibine(özellikle Gökben ve Necip’e :) ), sponsorlara ve tabii ki lider kadromuza teşekkürler.

image

Soldan Sağa : Yiğit Aktan – Mustafa Acungil – Kadir Evciler – Turgay Sahtiyan – Osman Çokakoğlu – Umit Sunar
Arkada : Serkan Bark

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan