Merhabalar Arkadaşlar;
Uzun bir aradan sonra yine birlikteyiz. Bu sefer karsınıza cok zahmetli ama günlerce yapılacak bir işlemi cok kısa bir sürede yapan bir script ile karsınızdayım.
Bu script bir veritabanı tablolarında bulunan alanları teker teker geziyor ve sizin yamanızı istediğiniz işlemleri yapıyor.
use (Database_Name)
go
ALTER procedure call_degistir
@yeni varchar(10), ( Bu kısım yazdıgımız cursor ifadesini procedure cevirmek istiyorsak
@eski varchar(10) kullanılır )
AS
Cursor Başlangıcı
declare @alan nvarchar(50) Kullanılacak değişkenler tanımlanıyor
declare @table nvarchar(100)
declare @sqlcumle nvarchar(max)
declare curdeneme cursor for Cursor tanımı yapılıyor ve nasıl
select table_name , column_name from INFORMATION_SCHEMA.COLUMNS nerede calısacagı belirleniyor
where column_name like '%adi%'
open curdeneme Tanımlanan cursor acılıyor
fetch next from curdeneme into @table, @column Cursor a bir dahaki alana git tablo ,alan
isimerini al komutu veriliyor
set @yeni = '''' + @yeni + '''' string bir ifade ile calısıyorsak bu kısımın
set @eski = '''' + @eski + '''' yazılması gerekiyor
while @@FETCH_STATUS =0 yukarıdaki işlemler dogru ise işlem baslıyor
begin
set @sqlcumle = 'update '+ @table + ' set ' + @deneme + '=' +@yeni+ ' where ' + @deneme + '='+ @eski
exec sp_executesql @sqlcumle
fetch next from curdeneme into @table, @deneme
end
----------yukarıdaki cümlede yapmak istedikleriniz yazılacak @yeni ve @eski yerine sizinkoyacagınız cümleler yazılmalı cünkü bu ifadeler procedur için calısmaktadır----------------------------------------
CLOSE curdeneme yapılan işlemler tamamlandıysa cursor kapanıyor
DEALLOCATE curdeneme bu iki komut cursor ün basa dönmesini saglıyor
RETURN
---------------------------------Sadece cursor olarak yazılacaksa buraya kadar yazılmalı ve F5 tusuna basılmalı---------
GO
EXEC call_degistir @eski='bilgi yazılacak',@yeni='bilgi yazılacak' eger procedure olarak yazılmıssa bu
komut calıstırır
Table_Name: bu komut üzerinde calısılan tablo adını hafızaya alır MSSQL de özel bir koddur
Column_Name: bu komut üzerinde calısılan alan adını hafızaya alır MSSQL de özel bir koddur
INFORMATION_SCHEMA.COLUMNS: Database de bulunan tüm bilgileri alanları tabloları ifade eder MSSQL de özel bir koddur
Şimdi bu yazdıgımız kod veritabanında her alanda dolasarak adi ismindeki alanları bulacak ve sizin istediğiniz değişikligi yapacaktır.
table_name ve column_name bilindigi üzere update cümlesi içindir cünkü tablo ve alan adı alınmadan update cümlesi yazılmaz. Bu kod ileri düzey MSSQL developerlar tarafından kullanılmaktadır calısan herkes yapabilir bence
Herkese İyi Calısmalar..........