我有一个存储过程,我将表插入临时表,然后使用游标逐行读取临时表:
USE [TEST_DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[returnValidationFailures]
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP 0 * INTO TempTbl FROM USER
DECLARE cursor1 CURSOR FAST_FORWARD FOR
SELECT *
FROM USER
OPEN cursor1
INSERT INTO TempTbl
EXEC ('fetch next from cursor1')
WHILE @@FETCH_STATUS = 0
INSERT INTO TempTbl
EXEC ('fetch next from cursor1')
CLOSE cursor1
DEALLOCATE cursor1
SELECT *
FROM TempTbl
DROP TABLE TempTbl
END
我想要的是通过以下参数发送表名:
@TableNameParam varchar(10)
然后插入临时表,如:
SELECT TOP 0 * INTO TempTbl FROM @TableNameParam
DECLARE cursor1 CURSOR FAST_FORWARD FOR
SELECT *
FROM @TableNameParam
这显然不起作用(显然)。但我试过的其他方法都没有用。 有什么方法可以设置EXEC调用的数据,如:
EXEC ('SELECT * FROM ' + @TableNameParam
' WHERE STATUS=1')
进入临时表?
注意:我不知道表结构。
答案 0 :(得分:0)
我不太清楚我明白你的最终范围是什么,但我的建议是使用基于集合的方法。
要直接回复您的问题,您应该考虑使用临时表(#TempTable)而不是表变量(@TempTable)。
EXEC ('SELECT * FROM ' + #TableNameParam + ' WHERE STATUS=1')
您的数据如何在临时表中获得?