【问题标题】:Insert into temp table from exec call stored procedure从 exec 调用存储过程插入临时表
【发布时间】:2014-04-08 06:35:32
【问题描述】:

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

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

进入临时表?

注意:我不知道表结构。

【问题讨论】:

  • 您需要将表作为参数发送还是将存储过程的结果放入临时表中,还是两者兼而有之?\
  • 你为什么在这里使用光标???
  • @MihaiBejenariu ,我将表名作为参数发送到存储过程。存储过程应该从该表中读取数据并将其插入到临时表中
  • @NenadZivkovic ,我在这里使用游标,因为我需要逐行处理数据。我没有在这里包含任何代码。

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


【解决方案1】:

我不太确定我是否了解您的最终范围,但我的建议是使用基于集合的方法。

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

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

你的临时表中的数据是如何获取的?

【讨论】:

  • 我需要的是这样的(伪代码):INSERT INTO TempTbl EXEC ('SELECT * FROM ' + @TableNameParam + ' WHERE STATUS=1') 其中@TableNameParam 只是我从中获取数据的原始表的名称
  • 怎么样:INSERT INTO #TempTable EXEC returnValidationFailures;从#TempTable 中删除状态!= 1
  • 我不能用那个。要使用它,我必须事先定义临时表。由于临时表应该是动态的,我不能使用它。我需要的是替换:SELECT TOP 0 * INTO TempTbl FROM USER。此行定义表并将数据插入其中\
  • @DilangaThalpegama EXEC ('SELECT TOP 0 * INTO TempTbl FROM ' +@TableNameParam) ?
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2017-11-18
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
相关资源
最近更新 更多