Transact-SQL(T-SQL) MsSQL

 

   İşim gereği çok fazla sayıda veritabanı ile haşır-neşir olmaktayım. Bunlardan birisi de MsSql veritabanı. En az 500 adet tablosu olan bir veritabanının tablolarının satır ve sütunlarının içerisinde çoğu kez kaybolduğum tartışmasız bir gerçek ne yazık ki. Hele bu tabloların bir kısmında veri yoksa, boşu boşuna orda durması size daha fazla zaman kaybettirir. Bu yüzden içerisinde kayıt olmayan tabloları silmek yada adını değiştirmek için T-SQL e işim düştü. Burada cursor ve loop’lardan, değişken tanımlayıp, dinamik sorgu çalıştırmaya ve sonuçları ekranda göstermeye kadar hazır, fırından yeni çıkmış kodlarımı yayınlıyorum…

DECLARE @TABLO_ADI VARCHAR(50)
DECLARE @SORGU NVARCHAR(100)
DECLARE @KAYIT_SAYISI int

DECLARE crstab1 CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

OPEN crstab1

WHILE @@FETCH_STATUS = 0
BEGIN
   set @KAYIT_SAYISI=0
   FETCH NEXT FROM crstab1 INTO @TABLO_ADI
   set @SORGU='SELECT @KAYIT_SAYISI=COUNT(*) FROM '+@TABLO_ADI
   execute sp_executesql @SORGU
   if @KAYIT_SAYISI=0
   BEGIN
      set @SORGU='sp_rename '''+@TABLO_ADI+''',''A_'+@TABLO_ADI+''''
      execute sp_executesql @SORGU
   END
END

CLOSE crstab1
DEALLOCATE crstab1

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
2 Responses
  1. Berkant KARDUMAN diyor ki:

    Script içinde geçen sp_executesql çağırımının bu şekilde olması lazım.

    execute sp_executesql @SORGU,’@KAYIT_SAYISI int output’,'@KAYIT_SAYISI int’

  2. Berkant KARDUMAN diyor ki:

    aslında böyle doğru oluyor.
    Şimdi denedim :)
    set @SORGU=’SELECT @sayiOUT= COUNT(*) FROM ‘+@TABLO_ADI

    execute sp_executesql @query=@SORGU,@params=N’@sayiOUT int output’,@sayiOUT=@KAYIT_SAYISI output

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>