在存储过程中创建带有@parameter指令的表

时间:2012-11-14 22:37:32

标签: sql stored-procedures sql-server-2008-r2

我想在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'。

2 个答案:

答案 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
建议阅读

http://www.sommarskog.se/dynamic_sql.html