如何将表名作为存储过程的输入参数?

时间:2014-02-28 20:24:43

标签: sql-server stored-procedures table-variable

下面有一个小的存储过程。

我将表名作为存储过程的输入参数,以便我计划将数据插入临时表并显示相同的内容。这只是我项目存储过程的一个很小的代码块。

当我编译下面的内容时,它会将select语句中的参数视为表变量并将错误抛出为:

  

必须声明表变量“@TableName”。

SQL:

CREATE PROCEDURE xyz @TableName Varchar(50) 
AS 
BEGIN 
SELECT TOP 10 * INTO #Temp_Table_One 
FROM @TableName 

SELECT * FROM #Temp_Table_One 
END

2 个答案:

答案 0 :(得分:18)

CREATE PROCEDURE xyz 
@TableName NVARCHAR(128) 
AS 
BEGIN 
  SET NOCOUNT ON;
  DECLARE @Sql NVARCHAR(MAX);

SET @Sql = N'SELECT TOP 10 * INTO #Temp_Table_One 
              FROM ' + QUOTENAME(@TableName)
          + N' SELECT * FROM #Temp_Table_One '

 EXECUTE sp_executesql @Sql

END

答案 1 :(得分:0)

使用sql dynamic

CREATE PROCEDURE xyz @TableName Varchar(50) 
AS 
BEGIN 
 DECLARE @query
 set @query = 'SELECT TOP 10 * FROM '+ @TableName 
 EXEC @query
END

添加架构名称。

例如:

exec xyz @TableName ='dbo.mytable'

exec xyz @TableName ='myschema.mytable'