22

我在下面有一个小存储过程。

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

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

必须声明表变量“@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
4

3 回答 3

32
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
于 2014-02-28T20:31:07.287 回答
3

使用 sql 动态

尝试

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

添加架构名称。

例如:

执行 xyz @TableName = 'dbo.mytable'

exec xyz @TableName = 'myschema.mytable'

于 2014-02-28T22:20:34.783 回答
0
CREATE PROCEDURE sp_Get_Table
@Table_Name SYSNAME
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DynamicSQL NVARCHAR(4000)
SET @DynamicSQL = N'SELECT * FROM ' + @Table_Name
EXECUTE sp_executesql @DynamicSQL
END
GO

EXEC sp_Get_Table 'tblUKCustomers'

此代码将帮助您

于 2022-01-30T08:11:19.103 回答