如何在不存在的情况下插入?

fro*_*die 18 sql sql-server insert not-exists

我想将插入查询与"不存在的地方"结合起来,以免违反PK约束.但是,如下所示的语法给我一个Incorrect syntax near the keyword 'WHERE'错误 -

INSERT INTO myTable(columns...)
VALUES(values...)
WHERE NOT EXISTS
   (SELECT *
    FROM myTable
    WHERE pk_part1 = value1,
        AND pk_part2 = value2)
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

(通常,您可以将插入与where子句组合使用吗?)

ber*_*d_k 23

INSERT INTO myTable(columns...)
Select values...
WHERE NOT EXISTS
   (SELECT *
    FROM myTable
    WHERE pk_part1 = value1,
        AND pk_part2 = value2)
Run Code Online (Sandbox Code Playgroud)

编辑: 阅读martins链接后,如果承认,最好的解决方案是:

BEGIN TRY
    INSERT INTO myTable(columns...)
    values( values...)
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH;
Run Code Online (Sandbox Code Playgroud)

  • 这仍然可能导致尝试在加载下插入重复项.如果OP在SQL Server 2008上使用`Merge`可以避免此问题. (3认同)
  • 如此处所述http://stackoverflow.com/questions/3407857/only-inserting-a-row-if-its-not-already-there (3认同)