从exec调用存储过程插入临时表

时间:2014-04-08 06:35:32

标签: sql sql-server stored-procedures cursor sqlparameters

我有一个存储过程,我将表插入临时表,然后使用游标逐行读取临时表:

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')

进入临时表?

注意:我不知道表结构。

1 个答案:

答案 0 :(得分:0)

我不太清楚我明白你的最终范围是什么,但我的建议是使用基于集合的方法。

要直接回复您的问题,您应该考虑使用临时表(#TempTable)而不是表变量(@TempTable)。

EXEC ('SELECT * FROM ' + #TableNameParam + ' WHERE STATUS=1')

您的数据如何在临时表中获得?