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)
どうすればこれを達成できますか?
(一般的に、挿入とwhere句を組み合わせることができますか?)
INSERT INTO myTable(columns...)
Select values...
WHERE NOT EXISTS
(SELECT *
FROM myTable
WHERE pk_part1 = value1,
AND pk_part2 = value2)
編集:マーティンのリンクを読んだ後、認めれば、最善の解決策は次のとおりです。
BEGIN TRY
INSERT INTO myTable(columns...)
values( values...)
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR etc
END CATCH;
値の一意のリストを保持する最も簡単な方法は、a)列を主キーとして設定するか、b)列に一意の制約を作成することです。これらのどちらでも、テーブルに既に存在する値に値を挿入/更新しようとするとエラーが発生し、NOT EXISTS/etcなどがサイレントに失敗するとエラーは発生しません。クエリは適切に実行されます。
つまり、INSERT/SELECTを使用します(VALUES部分は含めないでください)。
INSERT INTO myTable(columns...)
SELECT [statically defined values...]
FROM ANY_TABLE
WHERE NOT EXISTS (SELECT NULL
FROM myTable
WHERE pk_part1 = value1
AND pk_part2 = value2)
どの例も私にとってはうまくいかなかったので...この例をお勧めします:
INSERT INTO database_name.table_name(column_name)
SELECT column_name
FROM database_name.table_name
WHERE NOT EXISTS (SELECT NULL
FROM database_name.table_name
WHERE column_name = 'Column Value')