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
<<  Haziran 2017  >>
PaSaÇaPeCuCuPa
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
Keywords

Merhaba arkadaşlar

Bazı tablolarımızda identity yani otomatik artan alan kullanırız. Örneğin fiş kaydettiğimiz tablolarda bu otomatik artan sayı bizim için primary key dir. Master-Detail tarzı yapılarda da detail ile master ı bu identity kolon vasıtasıyla ilişkilendiririz.

Identity içeren bu tablolara insert yaptıktan sonra bu insert kaydının aldığı değeri öğrenmek isteyebiliriz. Bunun için kullanabileceğimiz SQL Server ın bize sunduğu 3 tane fonksiyon var.

  • IDENT_CURRENT
  • SCOPE_IDENTITY( )
  • @@IDENTITY

IDENT_CURRENT herhangi bir session veya kapsam bağımsız öğrenmek istediğimiz tablonun identity i değerini bize vermektedir. Dolayısıyla biz insert edip ident_current yapana kadar eğer araya bir kayıt girerse yanlış identity i almamız mümkün. Bu durumda transaction başlatıp insert ve ident_current işleminden sonra transaction ı bitirmek en mantıklı çözüm olmakta.

SCOPE_IDENTITY ve @@IDENTITY birbirine çok benzemekte. 2 side içinde bulunulan session için son arttırılmış olan identity değerini vermekte. Yani biz identity sini öğrenmek istediğimiz tabloyu belirtmeyip en son hangi tabloda ki hangi identity arttırıldıysa onu alabilmekteyiz.

Aralarında ki fark ise Scope_Identity işlemin yapıldığı kapsam için geçerliyken @@Identity bahsi geçen session ın tamamında gerçekleşmektedir.

Hemen bir örnekle arada ki farkı daha iyi anlayalım. T1 adlı bir trigger ımız olsun. Bu trigger içinde de T2 adlı trigger tetiklensin.

T1 trigger ında bir insert yapıldıktan sonra T2 adlı trigger da tetiklenecek ve o da bir insert yapacak diye varsayalım.

Bu durumda T1 içinde scope_identity kullanınca sadece T1 içinde ki insert işlemi sonucunda ki identity i alırken, @@identity kullanırsak eğer T2 trigger ında ki insert te dikkate alınacaktır. Umarım anlatabilmişimdir.:)

Daha fazla bilgiye msdn den ulaşmak mümkün:) Eğer kafanıza takılan bir soru olursa yorum kısmında sorabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar

Daha önceki yazılarımda Management Studio üzerinden BackUpve Restore işlemlerini anlatmıştım. Eğer o makaleleri okumadıysanız okumanızı tavsiye ederim.

Bu yazımda ise T-SQL komutları ile nasıl BackUp ve Restore yapabiliriz, bunun örneklerine bakacağız.

Dikkat edilmesi gereken noktalardan biri BackUp ve Restore işlemini yapacak sql user ın bu işlemleri yetkisi olması gerekmektedir.

En base mantıkta backup işleminin T-SQL komutu aşağıdaki gibidir. Bu SQL komutu Sena2009 database ini 'D:\TURGAY\deneme2.bak' uzantasına yedekler.

BACKUP DATABASE Sena2009 
TO DISK = 'D:\TURGAY\deneme2.bak' 
WITH FORMAT;

Restore işleminin base T-SQL komutu ise aşağıdaki gibidir.

RESTORE DATABASE Sena2009_Temp2
   FROM DISK = 'D:\TURGAY\deneme2.bak'

Bir sonraki yazımda otomatik yedekleme yapmak için schedule nasıl hazırlanır bunu işleyeceğiz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Daha önce back up işlemini anlatmıştım. Bu yazımda da Restore yani yedeği geri yükleme işleminden bahsetmeye çalışacağım.

Gene işlemimizi SQL Server 2008 Management Studio üzerinden yapacağız.

Management Studio da ki databases in üzerindeyken sağ tuş ile Restore Databaese kısmına geliyoruz.

bu4

To Database kısmında restore edilecek veritabanının adını yazıyoruz. Back up aldığımız veritabanının adını yazmak zorunda deiliz. İstediğimiz bir ad yazabiliriz.

From database seçeneği ile hali hazırda yüklü olan bir database den direk restore yapmamız mümkün.

From device seçeneği ise bir back up dosyasından restore yapmaya yarıyor. Biz bu kısmı kullanacağız.

From device ı seçip yandaki buton vasıtasıyla daha önce aldığımız back up dosyasını seçiyoruz.

bu3

Ok e basınca arka ekrana dönüyoruz ve seçtiğimiz dosya alttaki listeye yazılıyor. Burda ki restore kolonuna tik koyuyoruz.

Daha sonra options sekmesine geçiyoruz.

Burda istersek data ve log dosyalarının tutuldukları dizinleri değiştiriyoruz ve ok e basıyoruz. Eğer dizinler sistemde açık değilse hata alınacaktır.

Restore işlemimiz bu kadar.

Daha sonraki yazılarımda back up ve restore işlemlerinin T-SQL kodlarıyla nasıl yapıldıklarını anlatmaya çalışacağım. Buradan erişebilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda SQL Server 2008 Management Studio üzerinden backup(yedekleme) işleminin nasıl yapıldığını anlatacağım.

Management Studio yu çalıştırdıktan sonra bağlantıyı kuruyoruz ve yedek almak istediğimiz veritabanına sağ tıklayıp Task ın altında ki Back up yazısına tıklıyoruz.

bu1

Database kısmında yedeği alınacak veritabanı görülmekte. Bu kısımda değişiklik yapp başka bir veritabanını da yedekleyebiliriz.

Destination kısmından add butonu vasıtasıyla yedeğin hdd üzerinde nereye alınacağını seçiyoruz.

bu2

Options kısmında ki Overrite media kısmında daha önceki bir dosyanın üzerine backup alınıyorsa bunun yeni bir backup mı olacağını yoksa üzerine mi yazılacağını seçebilirsiniz.

Eğer yeni bir backup olarak belirlerseniz restore işlemi sırasında dosya tek olsa bile istediğiniz tarihte ki back up a dönmeniz mümkün olabilmekte.

Diğer ayarlarıda istediğimize göre yapıp Ok e basıyoruz ve yedeğimiz alınıyor.

Bir sonra ki yazımda restore(yedeği geri yükleme) işleminden bahsedeceğim. Buradan erişebilirsiniz.

Bu arada backup işleminin T-SQL ile nasıl yapıldığı hakkında ki yazıya buradan erişebilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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


turgay , 12. Temmuz 2009, 19:38

Merhaba arkadaşlar,

Bu yazımda SQL Server 2008 ile gelen yeni bir komut olan Merge komutunu anlatacağım.

Veritabanına insert işlemi yaparken eğer insert etmek istediğimiz kayıt varsa bu kaydı update etmek isteyebiliriz. Yani kayıt varsa update et, kayıt yoksa insert et.

Merge komutundan önce bunu ancak if komutu ile kontrol edip kod kalabalığına sebebiyet verirdik. Örneğin aşağıda ki gibi;

if exists(select ckod from cari_kart where ckod='xx1')
  update cari_kart set cname='deneme' where ckod='xx1'
else
  insert into cari_kart (ckod,cname) values ('xx1','deneme1')

Oysa merge komutu ile bunu şöyle yapmamız mümkün;

MERGE INTO Cari_Kart AS ck
USING (VALUES ('xx1','Deneme1'), ('xx2', 'Deneme2'), ('xx3', 'Deneme3'))
       AS X (CKod, CName)
ON ck.CKod = X.CKod
WHEN MATCHED THEN
	UPDATE SET CName = X.CName
WHEN NOT MATCHED BY TARGET THEN
	INSERT (CKod, CName) VALUES (X.CKod, X.CName);

Daha tutarlı bir görünüm kazandı değil mi? :)

Özellikle table dan table a insert-update işlemleri için merge komutu oldukça kullanışlı.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar

Bu yazımda SQL Server 2008 de yazılmış bir sql cümlesinde gelen sonuçtaki bir kolondaki tekrarlanan verilerin nasıl gizleneceğini göstereceğim.

Örneğin fatura detaylarını tuttuğumuz bir tablomuz olsun. Bu tabloya select çektiğimizde her satırda faturanın ana bilgisi olan belgeno nun gösterilmesini istemiyorum. Sadece değiştiğinde görüntülenmesini istiyorum.

Bu durumda kullanmamız gereken sql aşağıdaki gibidir.

WITH Urun
     AS (SELECT SEQUENCE = row_number()
                             OVER(ORDER BY BelgeNo, skod),
                belgeno,
                skod,
                miktar
         FROM   Fatura_Har t),
     Tabular
     AS (SELECT a.SEQUENCE,
                a.BelgeNo,
                a.Skod,
                a.Miktar
         FROM   Urun a
         WHERE  SEQUENCE = 1
         UNION
         SELECT b.SEQUENCE,
                BelgeNo = CASE
                          WHEN a.BelgeNo = b.BelgeNo THEN ''
                          ELSE b.BelgeNo
                        END,
                b.skod,
                b.Miktar
         FROM   Urun a
                JOIN Urun b
                  ON a.SEQUENCE = b.SEQUENCE - 1
         WHERE  b.SEQUENCE > 1)
SELECT   BelgeNo,
         skod,
         Miktar
FROM     Tabular
ORDER BY SEQUENCE
GO

Bu durumda çıktığımız şu şekilde olacaktır.

Belgeno   skod   Miktar
1             a        5
               b        3
               c        4
               d        9
2             a        2
               c        6
               e        9
3             b        1
               d        2
               e        7

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan  

Etiketler:
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 arkadaşlar,

Bu yazımda verilen bir string de ki , ile ayrılmış parçaları ayırıp bir table a atan sql fonksiyonu inceleyeceğiz.

İşlemlerimizde Sql String Fonksiyonlarını kullanacağız. Dolayısıyla şu yazıyı okumanızı tavsiye ederim.

Fonksiyonumuz şu şekilde;

CREATE FUNCTION dbo.StringToList (@StringX VARCHAR(500))
RETURNS @RetTbl Table(DegerX varchar(50))
BEGIN
  if @StringX<>'' Begin  
     While Charindex(',',@StringX)>0 Begin
       insert @RetTbl (DegerX) values (Substring(@StringX,1,Charindex(',',@StringX)-1 ) )
       set @StringX = Substring(@StringX,Charindex(',',@StringX)+1,len(@StringX) )
     end  
     insert @RetTbl (DegerX) values (@StringX)
   end
   
  RETURN
END 

GO

Kullanımı;

SELECT * FROM dbo.StringToList ('Turgay,Sahtiyan,Yıldız,Teknik,Üniversitesi')

Sonuç;

sqlsplit

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar

Bu yazımda SQL Server da ki DateTime(Tarih) fonksiyonları bir başlık altında toplayacağım.

  • DateAdd – Verilen tarihe ekleme çıkarma yapabileceğimiz DateAdd fonksiyonunun detaylı anlatımına buradanulaşabilirsiniz.
  • DateDiff – Verilen 2 tarih arasında ki farkları bulmaya yaratan DateDiff fonksiyonunun detaylı anlatımına buradanulaşabilirsiniz.
  • DateName – Verilen tarihin verilen parametresinin adına erişmeye yarayan DateName fonksiyonunun detaylı anlatımına buradan ulaşabilirsiniz.
  • DatePart – Verilen tarihin verilen parametresinin değerine erişmeye yarayan DatePart fonksiyonunun detaylı anlatımına buradan ulaşabilirsiniz.
  • Day – Verilen tarihin gün değerini almaya yarar. Kullanımı select day(‘05.08.2007’) şeklindedir. Bu örnek için 5 değerini döndürür.
  • GetDate() – Anlık tarih ve saat bilgisini döndürmeye yarar. Kullanımı select getdate() şeklindedir. Bu örnek için 2007-05-08 17:10:52.107 değerini döndürür.
  • GetUTCDate() – Anlık Greenwich yani GMT tarih ve saat bilgisini döndürmeye yarar. Kullanımı select getutcdate() şeklindedir. Bu örnek için 2007-05-08 14:10:52.107 değerini döndürür.
  • Month – Verilen tarihin ay değerini almaya yarar. Kullanımı select month(‘05.08.2007’) şeklindedir. Bu örnek için 8 değerini döndürür.
  • Year – Verilen tarihin yıl değerini almaya yarar. Kullanımı select year(‘05.08.2007’) şeklindedir. Bu örnek için 2007 değerini döndürür.

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda SQL Server da ki DateAdd fonksiyonundan bahsedeceğim.

DateAdd fonksiyonu ile verilen tarihin ayını,gününü yada yılını arttırabilir yada azaltabilirsiniz. Kullanımı şu şekildedir;

DATEADD ( datepart , number, date ) 
  • datepart – Değişiklik yapılacak kısımdır.
  • number – Eklenecek yada çıkarılacak sayıdır. Eğer küsüratlı rakam girilirse sadece tam sayı olan kısım kullanılır.
  • date – Değişiklik yapılacak tarihtir.</LI>

Datepart parametreleri ve kullanımları şu şekildedir; Tarihimiz 05.07.2008 olsun

Parametre Açıklama Kullanım Sonuç
yy veya yyyy Yılı değiştirmek için kullanılır select dateadd(yy,1,@t1)

2009-07-05 00:00:00.000

qq veya q Çeyreği değiştirmek için kullanılır select dateadd(qq,1,@t1)

2008-10-05 00:00:00.000

mm veya m Ayı değiştirmek için kullanılır select dateadd(mm,-2,@t1)

2008-05-05 00:00:00.000

dy veya y Yılın gününü değiştirmek için kullanılır select dateadd(dy,-5,@t1)

2008-06-30 00:00:00.000

dd veya d Günü değiştirmek için kullanılır select dateadd(dd,9,@t1)

2008-07-14 00:00:00.000

wk veya ww Haftayı değiştirmek için kullanılır Yukarıdakiler gibi  
dw Haftanın gününü değiştirmek için kullanılır Yukarıdakiler gibi  
hh Saati değiştirmek için kullanılır Yukarıdakiler gibi  
mi veya n Dakikayı değiştirmek için kullanılır Yukarıdakiler gibi  
ss veya s Saniyeyi değiştirmek için kullanılır Yukarıdakiler gibi  
ms Milisaniyeyi değiştirmek için kullanılır Yukarıdakiler gibi  

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda SQL Server da ki DateName fonksiyonundan bahsedeceğim.

DateName fonksiyonu datepart olarak verilen parametrenin adını döndürür. Mesela verilen tarihin ay adını yada gün adını almak için kullanabiliriz. Kullanımı şu şekildedir;

DATENAME ( datepart , date )

DateName parametreleri ve kullanımları şu şekildedir; Tarihimiz 05.07.2008 olsun.

Parametre Açıklama Kullanım Sonuç
yy veya yyyy Yıl farkını almak için kullanılır. select datename(yy,@t1)

2008

qq veya q Çeyrek farkını almak için kullanılır. select datename(qq,@t1)

3

mm veya m Ay farkını almak için kullanılır. select datename(mm,@t1)

Temmuz

dy veya y Yılın günü farkını almak için kullanılır. select datename(dy,@t1)

187

dd veya d Gün farkını almak için kullanılır. select datename(dd,@t1)

5

wk veya ww Hafta farkını almak için kullanılır. Yukarıdakiler gibi  
dw Haftanın günü farkını almak için kullanılır. Yukarıdakiler gibi  
hh Saat farkını almak için kullanılır. Yukarıdakiler gibi  
mi veya n Dakika farkını almak için kullanılır. Yukarıdakiler gibi  
ss veya s Saniye farkını almak için kullanılır. Yukarıdakiler gibi  
ms Milisaniye farkını almak için kullanılır. Yukarıdakiler gibi  

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda SQL Server da ki DateDiff fonksiyonundan bahsedeceğim.

DateDiff fonksiyonu verilen 2 tarih arasında ki datepart parametresi farkını verir. Mesela 2 tarih arasında ki ay veya yıl farkını bulmak için kullanabiliriz. Kullanımı şu şekildedir;

DATEDIFF ( datepart , startdate , enddate ) 

  • datepart – Farkı alınacak kısım
  • startdate – Birinci tarih
  • enddate – İkinci Tarih

DateDiff parametreleri ve kullanımları şu şekildedir; @t1 01.01.2009, @t2 '23.07.2011' olsun.

Parametre Açıklama Kullanım Sonuç
yy veya yyyy Yıl farkını almak için kullanılır. select datediff(yy,@t1,@t2)

2

qq veya q Çeyrek farkını almak için kullanılır. select datediff(qq,@t1,@t2)

10

mm veya m Ay farkını almak için kullanılır. select datediff(mm,@t1,@t2)

30

dy veya y Yılın günü farkını almak için kullanılır. select datediff(dy,@t1,@t2)

933

dd veya d Gün farkını almak için kullanılır. select datediff(dd,@t1,@t2)

933

wk veya ww Hafta farkını almak için kullanılır. Yukarıdakiler gibi  
dw Haftanın günü farkını almak için kullanılır. Yukarıdakiler gibi  
hh Saat farkını almak için kullanılır. Yukarıdakiler gibi  
mi veya n Dakika farkını almak için kullanılır. Yukarıdakiler gibi  
ss veya s Saniye farkını almak için kullanılır. Yukarıdakiler gibi  
ms Milisaniye farkını almak için kullanılır. Yukarıdakiler gibi  

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda Sql Server da Case kullanımını anlatacağım.

Hemen bir örnekle başlayalım. Örnek uygulamamızda pubs ın altında ki sales table ını kullanacağız. DatePart ın nasıl kullanıldığı hakkında bilgi almak istiyorsanız burayı tıklayınız.

İlk örneğimizde sales table ında ki satışları yıllara göre kolon kolon vermek istiyoruz. Şu tarz bir çıktı alma amacındayız.

case1

Bu çıktıyı alabileceğimiz sql cümlesi aşağıdaki gibidir:

select stor_id
  ,sum((case datepart(year,ord_date) when '1992' then qty else 0 end)) as '1992'
  ,sum((case datepart(year,ord_date) when '1993' then qty else 0 end)) as '1993'
  ,sum((case datepart(year,ord_date) when '1994' then qty else 0 end)) as '1994'
  ,sum((case datepart(year,ord_date) when '1995' then qty else 0 end)) as '1995'
from sales
group by stor_id
order by stor_id

 

2.örneğimizde ise stor_id ve ord_num a göre gruplama yaparak toplam qty rakamına bakacağız. Bu rakam 20 den küçükse küçük bir satış,20 den büyük 50 den küçükse orta bir satış, 50 den büyükse büyük bir satış demek istiyoruz. Almak istediğimiz çıktı şu şekilde.

case2

Sql cümleciğimiz;

select stor_id,ord_num,(case when sum(qty)<20 then 'Küçük Satış' 
			    when sum(qty)<50 then 'Orta Satış'
			    when 50<=sum(qty) then 'Büyük Satış' end) 'Satış Büyüklüğü'
from sales
group by stor_id,ord_num
order by stor_id,ord_num

SQL Server da case kullanımı bu şekilde. Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda SQL Server da ki DatePart fonksiyonundan bahsedeceğim.

DatePart fonksiyonu verilen tarihin gün,ay,yıl gibi bilgilerini almak için kullanabileceğimiz bir fonksiyondur. Kullanımı şu şekildedir;

DATEPART (datepart, date) 
DatePart kısmına yazıp alabileceğimiz değerleri gösteren tablo aşağıda ki gibidir. Tarihimiz 02.07.2009 dur.

Bu arada getdate() anlık tarih-saat değerini alabilirsiniz.

Parametre Açıklama Kullanım Sonuç
yy veya yyyy Yılı almak için kullanılır select datepart(yy,getdate()) 2009
qq veya q Çeyreği almak için kullanılır. select datepart(qq,getdate()) 3
mm veya m Ayı almak için kullanılır. select datepart(mm,getdate()) 7
dy veya y Yılın kaçıncı günü olduğunu almak için kullanılır. select datepart(dy,getdate()) 183
dd veya d Günü almak için kullanılır. select datepart(dd,getdate()) 2
wk veya ww Haftayı almak için kullanılır. select datepart(wk,getdate()) 27
dw Haftanın kaçıncı günü olduğunu almak için kullanılır. select datepart(dw,getdate()) 5
hh Saati almak için kullanılır. select datepart(hh,getdate()) 15
mi veya n Dakikayı almak için kullanılır. select datepart(mi,getdate()) 47
ss veya s Saniyeyi almak için kullanılır. select datepart(mi,getdate()) 4
ms Milisaniyeyi almak için kullanılır. select datepart(ms,getdate()) 967

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda SQL Server da (Transact SQL) dinamik SQL nasıl hazırlanır ve kullanılır onu göreceğiz.

SQL Server da Stored Procedure Kullanımı yazımı okumadıysan ilk önce o yazımı okumanızı tavsiye ederim. Yazıya buradanerişebilirsiniz.

Bildiğiniz gibi source kodlarımızda sql cümleleri hazırlanırken if-case gibi yapılarla sql cümlelerimizi string şeklinde oluşturup istediğimiz gibi müdahele etmemiz mümkün. Fakat sql server da bu kadar esnek değiliz.

Mesela şöyle bir örneğimiz olsun. Her sene başında firmanın kataloğunu devir ettiğimizi düşünelim. Dolayısıyla her sene yeni bir katalog oluşuyor. Daha sonra biz raporlama programımızda istediğimiz katalogdan verilerin çekilip alınmasını istiyoruz. Bunuda bir stored procedure ile yapıyoruz.

Normalde dynamic sql kullanmazsak stored procedure şu şekilde hantal bir yapıda olacaktır.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DynamicSP]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[DynamicSP]
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
CREATE Procedure dbo.DynamicSP @KatalogAdi varchar(10)
With Encryption
as set nocount on begin tran  
  if @KatalogAdi='pubs'
      select * from pubs.dbo.authors
  else if @KatalogAdi='pubs1'
      select * from pubs1.dbo.authors
commit tran
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Oysa dinamik SQL kullanarak bu stored procedure ü şu şekilde yazmamız mümkün.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DynamicSP2]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[DynamicSP2]
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
CREATE Procedure dbo.DynamicSP2 @KatalogAdi varchar(10)
With Encryption
as set nocount on begin tran  
  declare @SqlString nvarchar(500)
  set @SqlString='select * from ' + @KatalogAdi + '.dbo.authors'
  EXEC sp_executesql @SqlString
commit tran
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Örnekler çoğaltılabilir ama ana hatlarıyla dinamik SQL kullanımı bu şekildedir.

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Sql 2008 kurulu makinaya network üzerinden bağlantı kurmaya çalıştığınızda aşağıdaki gibi bir hata alabilirsiniz.

“Sunucuyla bağlantı kurulurken ağ ile ilgili veya örneğe özel bir hata oluştu. Sunucu bulunamadı veya sunucuya erişilemiyor. Örnek adının doğru olduğunu ve SQL Server’ın uzak bağlantılara izin verdiğini doğrulayın.”

rc2

Bu durumda yapılması gerekenler.

1 – Kurulu olan makinada Management Studio yu açıp Server sağ tıklayıp properties/connections sekmesine geliyoruz.

rc1

Bu ekranda “Allow remote connections to this server” yazısını işaretliyoruz.

Ayrıca SQL Server ın kurulu olduğu makinadaki firewall ın kapatılması yada 1433 nolu port un açılması gerekmektedir.

Bu ayarları yaptıktan sonra bağlantıda bir problem yaşanmayacaktır.

Kolay gelsin

Turgay Sahtiyan

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 arkadaşlar,

Bu yazımda SQL Server da Stored Procedure kullanımından bahsedeceğim.

Projelerimizde bazı sık kullandığımız işlem yapan sql cümlelerini stored procedure yapmamızda fayda var. Bu şekilde bu sql cümlesini projenin bir çok yerinde kullanmaktansa yazdığımız stored procedure ü kullanabiliriz ve herhangi bir değişiklikte kodun tamamını değiştirmektense sadece stored procedure u değiştiririz.

Mesela bir finans uygulamamız olduğunu düşünelim. Sisteme fatura girildiği zaman başka bir özet tabloya ilgili cari için borç-alacak kayıtlarını stored procedure ile oluşturabiliriz. Bu şekilde kodumuzun birden çok yerinde fatura oluşturma işlemi varsa biz bunların hepsini stored procedure ile halledebiliriz.

Şimdi örnek bir stored procedure yazalım. Çalışma alanı olarak pubs kataloğunu kullanalım. Örneğimiz de job_id si verilen job u kopyalayarak yeni bir job yapalım ve yeni job un id sini döndürelim. Reel hayatta bunu fatura kopyalama olarak düşünebilirsiniz.

Açıklamaları sql kodda vermeye çalıştım. Buyrunuz.

Stored Procedure:

/*Job2Job stored procedure ün adı*/
/*Job2Job sistemde varsa drop ediyoruz.*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Job2Job]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Job2Job]
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
/*Job2Job u create ediyoruz.*/
/*@JobID_Source - Kopyalamak istediğimiz job un id si*/
/*@JobID_Dest - Yeni oluşan job un id si. Bunu output ile alıyoruz.*/
CREATE Procedure dbo.Job2Job @JobID_Source int , @JobID_Dest int OUTPUT
/*with enc ile kodumuzu saklıyoruz.*/
/*artık kodumuz enterprise dan girilip bakılmaya çalışıldığında gözükmeyecektir*/
With Encryption
as set nocount on begin tran  
  /*insert işlemi*/
  insert jobs
    select job_desc,min_lvl,max_lvl from jobs where job_id=@JobID_Source
  /*insert ten sonra job kataloğunda ki en son numara yeni oluşan job un id sidir.*/
  set @JobID_Dest=IDENT_CURRENT('Jobs')
commit tran
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Kullanımı ise şu şekilde:

declare @JobID_Dest int
select @JobID_Dest=0
exec dbo.Job2Job 1,@JobID_Dest output
select @JobID_Dest

Sormak istediğiniz bir şey olursa yorum kısmını kullanabilirsiniz.

Kolay gelsin

Turgay Sahtiyan

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


turgay , 1. Temmuz 2009, 10:02

Merhaba arkadaşlar,

Uzun süredir SQL Server 2008 kurulumu ile ilgili adım adım bir döküman hazırlamayı düşünüyordum.

Geçenlerde web de gezerken aşağıdaki dökümanı buldum. Böyle güzel hazırlanmış bir yazı varken ekstra zaman harcayıp yazmaya gerek görmedim:)

Buyrun afiyetle yiyiniz:)

Sql 2008 Kurulumu - http://www.cozumpark.com/blogs/sql/archive/2008/11/09/sql-server-2008-kurulum.aspx

Kolay gelsin

Turgay Sahtiyan

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