【问题标题】:Insert stored procedure plus static value插入存储过程加静态值
【发布时间】:2018-05-24 15:21:43
【问题描述】:

我正在尝试将多个存储过程的结果插入到临时表中。但是,我还想在每个实例中添加另一个静态值,该值不是这些结果的一部分到表中,但我不确定执行此操作的语法。

这是我目前所处的位置:

CREATE TABLE #table (
STATIC              INT, --STATIC NUMBER
SP1                 INT, --STORED PROCEDURE COL 1
SP2                 INT, --STORED PROCEDURE COL 2
SP3                 INT, --STORED PROCEDURE COL 3
);

INSERT INTO #table values('1'), EXEC stored_procedure 'param_1', 'param_2';
INSERT INTO #table values('2'), EXEC stored_procedure 'param_3', 'param_4';

任何建议都会很棒!

【问题讨论】:

  • 我认为没有一种简单的方法可以做到这一点。
  • 在表格中插入时,您不能将某些值或表达式与 SP 的结果混合。要么在临时表上使用默认约束,要么在之后更新记录,要么让 SP 返回值。
  • 如果存储的过程被重写为表函数就可以做到,尽管这并不总是可能的
  • 执行INSERT EXEC 然后UPDATE 静态到你想要的任何值,它是NULL。

标签: sql sql-server stored-procedures sql-insert


【解决方案1】:

你不能完全按照你想要的方式去做,但你可以INSERT,UPDATE,INSERT,UPDATE

CREATE TABLE #table (
STATIC              INT, --STATIC NUMBER
SP1                 INT, --STORED PROCEDURE COL 1
SP2                 INT, --STORED PROCEDURE COL 2
SP3                 INT, --STORED PROCEDURE COL 3
);

INSERT INTO #table (SP1,SP2,SP3)
EXEC stored_procedure 'param_1', 'param_2';
UPDATE #table
SET STATIC = 1
WHERE STATIC IS NULL;

INSERT INTO #table (SP1,SP2,SP3)
EXEC stored_procedure 'param_3', 'param_4';
UPDATE #table
SET STATIC = 2
WHERE STATIC IS NULL;

假设存储过程按该顺序返回 3 列。

【讨论】:

    【解决方案2】:

    插入临时表然后加入:

    CREATE TABLE #sp (
    SpKey               INT IDENTITY(1,1) NOT NULL, --use for join
    SP1                 INT, --STORED PROCEDURE COL 1
    SP2                 INT, --STORED PROCEDURE COL 2
    SP3                 INT, --STORED PROCEDURE COL 3
    );
    
    CREATE TABLE #static (
    StaticKey           INT IDENTITY(1,1) NOT NULL, --use for join
    Value               INT
    );
    
    INSERT INTO #sp EXEC stored_procedure 'param_1', 'param_2'
    INSERT INTO #static VALUES (1)
    
    INSERT INTO #sp EXEC stored_procedure 'param_3', 'param_4'
    INSERT INTO #static VALUES (2)
    
    SELECT * INTO #table
    FROM
    (
    SELECT *
    FROM #static
    INNER JOIN #sp ON #static.StaticKey = #sp.SpKey) sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多