Forum
Aşağıdaki kodlar daha çok yazılımcı arkadaşlara yardımcı olur diye düşünüyorum. Ama herkesin elinin altında bulunması gereken bir kod.
Diyelim Bir program yazdınız ve sattınız. Program üzerinde yeni geliştirmeler yaptınız. Veri tabanında eklenen ya da çıkarılan fieldlar var. Tek tek bakmaya gerek yok. Aşağıdaki kodlar bunu sizin yerinize yapar. İyi çalışmalar.
declare @myserver varchar(100)
declare @mydb varchar(100)
declare @surumserver varchar(100)
declare @surumdb varchar(100)
set @myserver='172.20.1.32'
set @mydb='SERENDIPKARGO'
set @surumserver='1.db'
set @surumdb='2.db'
EXEC(' SELECT
sclmns.id,
sclmns.scale,
sclmns.prec,
table_name=so.name,
column_name=sclmns.name,
datatype=systypes.name
into #'+@surumdb+'
FROM ['+@surumserver+'].['+@surumdb+'].[dbo].sysobjects so
JOIN ['+@surumserver+'].['+@surumdb+'].[dbo].syscolumns as sclmns ON so.id = sclmns.id
JOIN systypes ON sclmns.xtype=systypes.xtype
WHERE so.xtype=''U''
and sclmns.xtype in (167,127,106,231,104,56,61,189)
ORDER BY so.name,sclmns.colid;
SELECT
sclmns.id,
sclmns.scale,
sclmns.prec,
table_name=so.name,
column_name=sclmns.name,
datatype=systypes.name,
length=systypes.length into #'+@mydb+'
FROM ['+@myserver+'].['+@mydb+'].[dbo].sysobjects so
JOIN ['+@myserver+'].['+@mydb+'].[dbo].syscolumns as sclmns ON so.id = sclmns.id
JOIN systypes ON sclmns.xtype=systypes.xtype
WHERE so.xtype=''U''
and sclmns.xtype in (167,127,106,231,104,56,61,189)
ORDER BY so.name,sclmns.colid;
select
''alter table ''+sdb.table_name+'' ALTER COLUMN ''+sdb.column_name+'' ''+
case
when sdb.datatype=''bigint'' then ''bigint''
when sdb.datatype=''decimal'' then ''decimal(''+cast(sdb.prec as varchar(20))+'',''+cast(sdb.scale as varchar(20))+'')''
when sdb.datatype=''nvarchar'' then ''nvarchar(''+cast(sdb.prec as varchar(10))+'')''
when sdb.datatype=''bit'' then ''bit''
when sdb.datatype=''int'' then ''int''
when sdb.datatype=''datetime'' then ''datetime''
when sdb.datatype=''timestamp'' then ''timestamp''
end as ''DegisenKolonlar'' into #table
from #'+@mydb +' as mdb
inner join #'+@surumdb+' as sdb on mdb.prec!=sdb.prec and mdb.table_name=sdb.table_name and mdb.column_name=sdb.column_name
where sdb.prec>mdb.prec;
select * from #table
where DegisenKolonlar is not null
');
Teşekkürler Ünal bey
Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************
Konu açılalı epey olmuş gerçi ama; ben yeni gördüm ve epeydir nasıl olabileceğini düşündüğüm bir soru tekrar zihnimde hortladı:
Index olan alanlar ne olacak? Ayrıca bu index'lerin null olmaması da gerekiyorsa?
Ayrıca yeni alanların null olmaması gerekiyorsa bu alanlar ne olacak?
Peki yeni oluşturulan alanların ilişkileri olması gerekiyorsa ne olacak?
Ayrıca yeni alanlar, eğer bir diyagramda kullanılmışlarsa ve tanımlılarsa ne olacak?
Bu kod tablolardaki yeni alanları incelerken aynı zamanda view'lardaki alanları da inceliyor mu?
Trigger'lar oluşturulmuşsa yeni veritabanında bunlar sıfırdan oluşturuluyor mu? Aynı soru stored procedure'ler için de geçerli?
Sorularım devam edecek ama eğer yazdığınız kod bunları da yapabiliyorsa ne güzel [:)]