Forum

İki veritabanı aras...
 
Bildirimler
Hepsini Temizle

İki veritabanı arasında değişen fieldlar

3 Yazılar
3 Üyeler
0 Reactions
612 Görüntüleme
(@unalaygun)
Gönderiler: 8
Eminent Member
Konu başlatıcı
 

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

');

 
Gönderildi : 20/03/2009 22:29

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 33367
Illustrious Member Yönetici
 

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.
*****************************************************************

 
Gönderildi : 21/03/2009 05:48

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

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 [:)]

 
Gönderildi : 25/02/2010 02:40

Paylaş: