如何动态执行这些动态生成的语句?

时间:2018-04-08 23:03:05

标签: sql sql-server tsql

以下SQL将为数据库中的所有表生成DROP语句:

 -- generate all drop table statements
SELECT 'DROP TABLE [' + SCHEMA_NAME(t.schema_id) + '].[' + t.NAME + '];'
FROM sys.tables t

上述语句的结果输​​出可以复制到SSMS中的新查询窗口,并执行以删除数据库中的所有表。我试图跳过上面的手动步骤。我可以编写什么SQL来动态执行从上面的语句生成的语句?

1 个答案:

答案 0 :(得分:0)

下面的示例将连接结果分配给变量以供执行。在SQL Server 2017中,使用STRING_AGG而不是XML PATH。

DECLARE @sql nvarchar(MAX) = 
    (SELECT 'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) + ';
'
FROM sys.tables t
FOR XML PATH(''), TYPE).value('.', 'nvarchar(MAX)');

EXEC sp_executesql @sql;

请注意,如果表由外键约束引用,则drop将失败。您可以通过首先使用类似技术删除所有外键约束来避免这种情况。

相关问题