如何创建 sp_executesql 以动态删除表
How to create sp_executesql to drop tables dynamicaly
出于某些原因,我正在尝试创建一个动态脚本来删除我之前创建的表。我无法正确使用语法,我需要这方面的帮助。
当我 运行 我的脚本时,它给出错误:
"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;
尝试以下查询:-
SET @sql = 'DROP TABLE @tmpTableName'; EXEC (@sql)
OR
DECLARE @sql NVARCHAR(MAX);
DECLARE @tmpTableName NVARCHAR(max)
SET @tmpTableName = '##gmAAA_COLLATION';
SET @sql = 'DROP TABLE'+QUOTENAME(@tmpTableName);
EXEC sp_executesql @sql,N'@tmpTableName NVARCHAR(max)',@tmpTableName
sp_executesql @stmt 和@params 参数需要 nvarchar
所以将变量的数据类型从 varchar
更改为 nvarchar
如下
DECLARE @sql NVARCHAR(MAX);
DECLARE @tmpTableName VARCHAR(max);
您不能使用静态 SQL 执行此操作,即 table 名称永远不能作为此类 SQL 语句中的参数。对于列名、模式名等也是如此。
如果您想使用 sp_executesql
执行此操作,您可以按如下方式动态构建 SQL:
SET @sql = 'DROP TABLE '+QUOTENAME(@tmpTableName);
EXEC sp_executesql @sql;
PS: sp_executesql
过程的 @stmt
参数需要是 NVARCHAR(...)
.
类型
SET @sql = 'DROP TABLE '+@tmpTableName;
EXEC sp_executesql @sql;
出于某些原因,我正在尝试创建一个动态脚本来删除我之前创建的表。我无法正确使用语法,我需要这方面的帮助。
当我 运行 我的脚本时,它给出错误:
"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;
尝试以下查询:-
SET @sql = 'DROP TABLE @tmpTableName'; EXEC (@sql)
OR
DECLARE @sql NVARCHAR(MAX);
DECLARE @tmpTableName NVARCHAR(max)
SET @tmpTableName = '##gmAAA_COLLATION';
SET @sql = 'DROP TABLE'+QUOTENAME(@tmpTableName);
EXEC sp_executesql @sql,N'@tmpTableName NVARCHAR(max)',@tmpTableName
sp_executesql @stmt 和@params 参数需要 nvarchar
所以将变量的数据类型从 varchar
更改为 nvarchar
如下
DECLARE @sql NVARCHAR(MAX);
DECLARE @tmpTableName VARCHAR(max);
您不能使用静态 SQL 执行此操作,即 table 名称永远不能作为此类 SQL 语句中的参数。对于列名、模式名等也是如此。
如果您想使用 sp_executesql
执行此操作,您可以按如下方式动态构建 SQL:
SET @sql = 'DROP TABLE '+QUOTENAME(@tmpTableName);
EXEC sp_executesql @sql;
PS: sp_executesql
过程的 @stmt
参数需要是 NVARCHAR(...)
.
SET @sql = 'DROP TABLE '+@tmpTableName;
EXEC sp_executesql @sql;