SQL Server 2014 多次执行存储过程并插入 table 包括参数

SQL Server 2014 execute stored procedure multiple times and Insert into table including parameter

我有一个获取两个参数的存储过程,DateEquipName 并且结果集未存储在 table.

我想做的是 运行 存储过程多次 EquipName 和每个结果集 INSERT 只变成一个 table (MyTable).

存储过程的结果有 30 行。

为此,我使用以下代码。

感谢this Link

DECLARE @EquipName INT

DECLARE curs CURSOR LOCAL FAST_FORWARD FOR
    SELECT EquipName 
    FROM EquipTable 
    WHERE ...

OPEN curs

FETCH NEXT FROM curs INTO @EquipName

WHILE @@FETCH_STATUS = 0 
BEGIN
    INSERT INTO MyTable
        EXEC sp_storeProc  '2018-01-01', @EquipName

    FETCH NEXT FROM curs INTO @EquipName
END

CLOSE curs
DEALLOCATE curs

我的问题是:

比方说,存储过程结果有 5 列,但 MyTable 一个额外的列 NameOfEquip,对于存储过程中的每个结果集, 将 @EquipName 插入该结果集的所有 30 行。

我该怎么做? MyTable 已使用正确的架构创建。

每次插入 table 后,尝试为所有 NULL 值更新 NameOfEquip。也许是这样的

WHILE @@FETCH_STATUS = 0 
BEGIN
    INSERT INTO MyTable
        EXEC sp_storeProc  '2018-01-01', @EquipName

UPDATE MyTable SET NameOfEquip = ISNULL(@EquipName,'') WHERE NameOfEquip IS NULL


    FETCH NEXT FROM curs INTO @EquipName
END

您可以将存储过程的结果插入到临时文件 table 中,然后从临时文件 table 中读取额外的列并插入到 'MyTable' 中。 像这样:

DECLARE @TempTable TABLE (ColA INT, ColB INT)

INSERT INTO @TempTable
EXEC sp_storeProc  '2018-01-01', @EquipName

INSERT INTO MyTable
SELECT *, @EquipName FROM @TempTable

您也可以使用 OPENROWSET 实现此目的。您可以找到有关此 here

的更多详细信息

以下是相同的示例。

例如你有如下SP。

CREATE PROCEDURE TEST
(
 @INPUT1 VARCHAR(10),
 @INPUT2 VARCHAR(20)
)
AS
BEGIN
SELECT @INPUT1 AS COL1, @INPUT2 AS COL2
END

如果直接执行SP

EXECUTE TEST 'A','B'

您将得到如下输出。

    COL1    COL2
   ------  ------
    A        B

要向结果附加一个额外的参数,您可以尝试如下操作。

DECLARE @TBL TABLE(COL1 VARCHAR(10), COL2 VARCHAR(10), COL3 DATETIME)

INSERT INTO @TBL(COL1,COL2,COL3)
SELECT A.*,GETDATE() 
from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;',
   'EXECUTE TEST ''A'',''B''') AS A

 SELECT * FROM @TBL

输出:

COL1    COL2    COL3
A        B      2018-02-21 09:09:03.257