我想在SQL Server中使用此代码创建一个表,但存储过程会返回错误
CREATE PROCEDURE Recovery_CountryCode (@NombreTabla SYSNAME)
AS
DECLARE @ParamDefinition nvarchar(500);
DECLARE @SQLString nvarchar (4000);
SET @SQLString=N'SELECT Name
INTO @TableName
FROM AdventureWorks2008R2.Production.Location';
SET @ParamDefinition=N'@TableName SYSNAME';
EXECUTE sp_executesql @SQLString, @ParamDefinition, @TableName=@NombreTabla;
GO
我想避免定义表
当我调用存储过程时:
EXEC Recovery_CountryCode @NombreTabla='Paises';
我收到以下消息:
男装。 102,Nivel 15,Estado 1,Línea2 Sintaxis不正确的cerca de'@ TableName'。
答案 0 :(得分:1)
您可以在程序中连接SQL
CREATE PROCEDURE Recovery_CountryCode (@NombreTabla SYSNAME)
AS
DECLARE @ParamDefinition nvarchar(500);
DECLARE @SQLString nvarchar (4000);
SET @SQLString=N'SELECT Name INTO ' +
@NombreTabla +
' FROM AdventureWorks2008R2.Production.Location';
EXECUTE sp_executesql @SQLString
GO
答案 1 :(得分:0)
您无法以这种方式将变量绑定到表名。你需要做一些像
这样的事情Declare @sql nvarchar(max), @NombreTable sysname = 'Test'
Set @sql = N'Select Name Into ' + @NombreTable +
N' From AdventureWorks2008R2.Production.Location
exec sp_executesql @sql
建议阅读