【问题标题】:Is it possible to use a stored procedure to update three different tables?是否可以使用存储过程来更新三个不同的表?
【发布时间】:2013-10-24 03:49:08
【问题描述】:

我有一个 proc 执行如下选择和更新语句。我需要将更新语句和将数据放入临时表的 select 语句合并到单个 sql select 语句中。

这可能吗?

             '                     

【问题讨论】:

  • 到目前为止你有没有尝试过?或者用谷歌搜索multiple statementssqlstored procedure之类的东西?
  • 我已经搜索了..但只回答了仅涉及单个表的情况。这可以通过在 select 语句中使用 case 来实现。但导致问题的原因是,这里在更新语句中涉及 3 个表。 tmp 表中的其他字段不应受到更新语句的影响。
  • 我认为这取决于您的 DBMS。
  • 数据库是SQL server 2008..你有什么想法吗??

标签: sql-server tsql select stored-procedures


【解决方案1】:

我找到了一种使用联合的方法。 这有点奇怪,但是因为我找不到其他东西,所以用这种方法解决

【讨论】:

    【解决方案2】:

    是的:

    CREATE TABLE TableA
    (
        valueA int
    )
    
    INSERT INTO 
        TableA
    VALUES
        (1),
        (2),
        (3)
    
    GO
    
    CREATE PROCEDURE test_procedure (@in_value int)
    AS
        BEGIN
    
            --insert into temp table
            SELECT
                @in_value [out_value]
            INTO 
                #TestTable
    
            -- update with join on temp table
            UPDATE
                T
            SET
                T.[out_value] = 2
            FROM
                #TestTable T
                INNER JOIN TableA A on A.valueA = T.out_value
            WHERE
                A.valueA = 1
    
            -- update with join on temp table again
            UPDATE
                T
            SET
                [out_value] = 3
            FROM
                #TestTable T
                INNER JOIN TableA A on A.valueA = T.out_value
            WHERE
                A.valueA = 2
    
            --select results including the original "in_value"
            SELECT 
                *, 
                @in_value [in_value]
            FROM
                TableA A
                LEFT JOIN #TestTable T on T.out_value = A.valueA
        END;
    GO
    
    --execute stored procedure
    EXEC test_procedure 1
    

    【讨论】:

    • 我不会使用临时表
    猜你喜欢
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2021-07-18
    相关资源
    最近更新 更多