如果我有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?有什么想法吗?
答案 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