数据库删除表

时间:2016-04-04 12:21:38

标签: c# sql sql-server

如果我有select t.name as tableName from sys.tables t ...我该如何删除所有这些表?我的意思是我拥有它们,但我想做点像......

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

一个选项是用C#来创建和运行一些SP?有什么想法吗?

3 个答案:

答案 0 :(得分:3)

下面是一个示例脚本。请谨慎使用。

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);

答案 1 :(得分:2)

在C#中,您可以构建这样的代码。 首先执行SELECT以使用表名填充数据表,然后使用StringBuilder类构建一个包含所有DROP的批处理命令。

强烈建议在运行此代码之前进行备份.....

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();

答案 2 :(得分: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