出于某些原因,我正在尝试创建一个动态脚本来删除我之前创建的表。我无法正确使用语法,因此我需要帮助。
当我运行我的脚本时,它给出了错误:
"Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'."
这是我的脚本。我猜它在 sp_executesql
语句中有错误。我该如何解决这个问题?
DECLARE @sql VARCHAR(MAX);
DECLARE @tmpTableName VARCHAR(max);
SET @tmpTableName = '##gmAAA_COLLATION';
SET @sql = 'DROP TABLE @tmpTableName';
EXEC sp_executesql @sql, N'@tmpTableName NVARCHAR(max)', @tmpTableName;
最佳答案
您不能使用静态 SQL 执行此操作,即表名永远不能作为此类 SQL 语句中的参数。对于列名、模式名等也是如此。
如果您想使用 sp_executesql
执行此操作,您可以按如下方式动态构建 SQL:
SET @sql = 'DROP TABLE '+QUOTENAME(@tmpTableName);
EXEC sp_executesql @sql;
PS:sp_executesql
过程的@stmt
参数需要是NVARCHAR(...)
类型。
关于sql - 如何创建 sp_executesql 以动态删除表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40625988/