2

我有 2 个相同的表,一个将被更新,另一个不会,所以我想编写存储过程来检查表 2 中现有记录的更新,如果不存在,则将表 1 中的记录插入表 2。

Table 1

    | Field1 | Field2 | Field3 |
    | ------ | ------ | -----: |
    |  A     |  1     |   $10  |
    |  B     |  2     |   $20  |
    |  C     |  2     |   $21  |


Table 2

    | Field1 | Field2 | Field3 |
    | ------ | ------ | -----: |
    |  A     |  3     |   $13  |
    |  B     |  2     |   $20  |

存储过程在本示例中将执行的操作是,它将使用表 1 中的数据更新表 2 中的行 (B),并将行 (C) 插入表 2。

4

2 回答 2

3

对于更新部分,您可以使用数据库中的 ID 或任何标识符字段进行检查:

UPDATE t2 
SET t2.field2 = t1.field2 and t2.field3 = t1.field3 
FROM table2 AS t2
INNER JOIN table1 AS t1 
      ON t2.field1=t1.field1

并且只需在更新语句之后添加上面回复中的插入部分。

于 2013-09-03T10:15:05.920 回答
2

你考虑过这样的事情吗?

INSERT INTO Table2
(
     Field1
    ,Field2
    ,Field3
)
SELECT 
     Field1
    ,Field2
    ,Field3 
FROM Table1 
WHERE NOT EXISTS (
                  SELECT
                       Field1
                      ,Field2
                      ,Field3 
                  FROM Table2
                  )

当然,如果你有一个身份种子,那么你只需取 MAX(Value) 代替。

于 2013-09-03T10:01:01.913 回答