0

我想在 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ínea 2 Sintaxis wronga cerca de '@TableName'。

4

2 回答 2

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
于 2012-11-14T22:43:13.193 回答
0

您不能以这种方式将变量绑定到表名。你需要做类似的事情

Declare @sql nvarchar(max), @NombreTable sysname = 'Test'

Set @sql = N'Select Name Into ' + @NombreTable +
           N' From AdventureWorks2008R2.Production.Location

exec sp_executesql @sql

http://www.sommarskog.se/dynamic_sql.html推荐阅读。

于 2012-11-14T22:43:50.797 回答