下面有一个小的存储过程。
我将表名作为存储过程的输入参数,以便我计划将数据插入临时表并显示相同的内容。这只是我项目存储过程的一个很小的代码块。
当我编译下面的内容时,它会将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
答案 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'