2016-04-04 24 views
1

select t.name as tableName from sys.tables t varsa ... Tüm bu tabloları nasıl bırakabilirim?Veritabanı bırakma tablosu

drop table where tableName in select t.name as tableName from sys.tables t 

bir seçenek bazı SP oluşturmak ve çalıştırmak için C# olurdu ... Ben onlara sahip istemem ama böyle bir şey yapmak ister misin? Herhangi bir ideea?

+0

bir biri olarak kapalı mı yoksa bir sürecin bu formu bölümünü yapar? –

+0

ya dinamik sql kullanmanız ya da sql sunucusunun dışında sql ifadeleri oluşturmanız gerekir (sizin durumunuza C#) –

cevap

3

Örnek bir komut dosyası aşağıdadır. Dikkatle kullanın.

DECLARE @SQL nvarchar(MAX) = ''; 
SELECT @SQL += N'DROP TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + N'.' + QUOTENAME(name) + N'; 
' 
FROM sys.tables 
<include your where clause here> 

EXEC(@SQL); 
+0

Sadece ihtiyaçlarım için biraz ayarlamam gerekiyordu, ama düşündüğüm şey buydu. Teşekkür ederim! – Minsk

2

C# içinde böyle bir kod oluşturabilirsiniz. İlk önce, tablo adlarıyla bir veri tablosunu doldurmak için SELECT'i çalıştırın, ardından gereken tüm DROP ile bir toplu iş komutu oluşturmak için StringBuilder sınıfını kullanın.

Kesinlikle bu kodu runnning başlamadan önce yedek almayı önermek .....

string cmdText = "select t.name as tableName from sys.tables t"; 
SqlCommand cmd = new SqlCommand(cmdText, connection); 
connection.Open(); 
DataTable dt = new DataTable(); 
dt.Load(cmd.ExecuteReader()); 
string baseCmd = "DROP TABLE {0};\r\n"; 
StringBuilder sb = new StringBuilder(); 
foreach(DataRow r in dt.Rows) 
    sb.AppendFormat(baseCmd, r["tableName"].ToString()); 

cmd.CommandText = sb.ToString(); 
cmd.ExecuteNonQuery(); 
0
DECLARE @SQL NVARCHAR(MAX) 

SELECT @SQL = STUFF((
    SELECT ' 
    IF OBJECT_ID(''' + SCHEMA_NAME(schema_id) + '.' + QUOTENAME(name) + ''', ''U'') IS NOT NULL 
     DROP TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + '; 
    ' 
    FROM sys.objects 
    WHERE [type] = 'U' 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') 

PRINT @SQL 
EXEC sys.sp_executesql @SQL 
İlgili konular