Sql 2008 Database i...
 
Bildirimler
Hepsini Temizle

Sql 2008 Database içindeki çoklu table drop veya delete sorgu  

Hulusi Bulut
(@HulusiBulut)
Üye

    Merhaba,


 Sql server 2008 üzerinde Tiger2 kullanıyoruz, daha önce SQL 2000 server'da tableları toplu seçip silmek kolaydı. 2008'de Table'ları seçmeye için vermiyor, tek tek silmek çok zor, bunun query ile Drop veya delete ile silmek için table isimlerinin ortak bir karakter sorgusu ile silmem gerekiyor. Tablo isimlerindeki ilk 5 ve 6 karakter aynı  sonrası önemli değil, benimde yapmak istediğim query ile ilk 5 ve 6 karakterine göre listelemek ve daha sonra drop etmek istiyorum. Sql ile ilgili fazla bilgim olmadığı için çözüm bulamadım. İnternet'te çok aradım bir türlü yapamadım. Bu konu ile ilgilenen, yardımcı olmak için cevap yazan herkeze şimdeden teşekkürler.


 Örneğin : Tablo adı : LG_001_01_STLINE, LG_001_02_STFICHE

Alıntı
Topic starter Gönderildi : 08/09/2011 20:07
Selahattin SADOGLU
(@SelahattinSADOGLU)
Üye

Merhaba,

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += '
DROP TABLE '
    + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
    + '.' + QUOTENAME(name) + ';'
    FROM sys.tables
    WHERE name LIKE 'LG_001%';

PRINT @sql;
-- EXEC sp_executesql @sql;

 

bunun gibi bir komutla geçerli bir önek belirterek yapabilirsiniz.Eğer tablolar arasında foreign key ilişkisi varsa , ozaman teker teker silmeye ihtiyacınız olacaktır.

 

Saygılar,

CevapAlıntı
Gönderildi : 08/09/2011 20:28
Hulusi Bulut
(@HulusiBulut)
Üye

Merhaba Selahattin bey,


öncelikle ilgilendiğin için teşekkürler. Bu sorguyu çalıştırmadan önce bir yerde takıldım. Bu tablo isimleri birden fazla Database'de mevcut, Database adları TigerDB, Tiger2DB, TigerDB_B , ben bu işlemleri her database içinde farklı çalıştıracağım, Birde sizden drop işleminden önce kontrol amaçlı aynı koşulda listeleme sorgusu göndermenizi rica ederim.


 


Saygılar,

CevapAlıntı
Topic starter Gönderildi : 08/09/2011 21:28
Selahattin SADOGLU
(@SelahattinSADOGLU)
Üye

Merhaba,

 

Bunun için kullanmanız gereken sorgu şöyle olmalıdır.

SELECT schema_name(schema_id), name FROM sys.tables WHERE name LIKE 'LG_001%'; 

 

Saygılar,

CevapAlıntı
Gönderildi : 09/09/2011 18:09
Hulusi Bulut
(@HulusiBulut)
Üye

Vermiş olduğunuz sorgu çalışıyor. işlemler tamamlanıyor. Database reflesh yapıyorum. herhangi bir değişiklik yok. Drop yerine DELETE yaptım, yine sonuç alamadım. Silinmemesinin nedenini anlamadım. Use [testDB] Drop Table LG_001_01_stline ile siliyor. ama sizin gönderdiğinizde silinmiyor.


Bende database'deki tüm tabloların listesi alım. CVS olarak kaydettim. Name kısmının önüne Drop Table ekledim. Gerekli listeyi Copy Paste ile sorgu çalıştırdım. Bir uğraştırdı.


İlginin için teşekkürler.

CevapAlıntı
Topic starter Gönderildi : 09/09/2011 21:25
Paylaş: