0

条件付きで挿入する構文はどうですか? 例: 挿入したい値がまだテーブルにないかどうかを確認しますか? (列がnullになる可能性があることを考慮して)

4

5 に答える 5

2

あなたの説明は非常に簡潔ですが、MERGEステートメントが必要なようです。

http://technet.microsoft.com/en-us/library/bb510625.aspx

データが存在するかどうかに基づいて挿入/更新/削除するために使用できる、またはすべてが 1 つのステートメントに含まれていない。

于 2013-08-15T14:40:07.557 に答える
2

挿入したい値が変数であるとします。

使用できますIF NOT EXISTS

IF NOT EXISTS (SELECT * FROM Table1 WHERE Col1 = @Val1 AND Col2 = @Val2)
INSERT INTO Table1 (Col1, COl2) VALUES (@Val1, @Val2)

またはあなたが使用することができSELECT..WHEREますEXISTS

INSERT INTO Table1 (Col1, COl2)
SELECT @Val1, @Val2
WHERE NOT EXISTS (SELECT * FROM Table1 WHERE Col1 = @Val1 AND Col2 = @Val2)

またはおそらくさらにいくつかの方法(NOT IN、LEFT JOIN、MERGE ...)

于 2013-08-15T14:44:17.330 に答える
1

たとえば、左結合または右結合を使用できます

WITH SourceTable AS
(
    SELECT
     *
    FROM ( VALUES
             ('A', 1)
            ,('A', 2)
            ,('B', 1)
            ,('C', 10)) nTable(nCol1, nCol2)
)
SELECT
 *
INTO #SourceTable
FROM SourceTable;

WITH NewRows AS
(
    SELECT
     *
    FROM ( VALUES
             ('A', 2)
            ,('A', 3)
            ,('B', 1)
            ,('C', 11)) nTable(nCol1, nCol2)
)
INSERT #SourceTable
(nCol1
,nCol2)
SELECT
 n.nCol1
,n.nCol2
FROM #SourceTable s
RIGHT JOIN NewRows n
ON s.nCol1=n.nCol1
AND s.nCol2=n.nCol2
WHERE s.nCol1 IS NULL;
于 2013-08-15T14:49:27.923 に答える
0

このようなことを意味しますか?

insert into t(col)
    select 'value'
    where not exists (select 1 from t where col = 'value');

ただし、一意のインデックス、フィルター処理されたインデックス、または外部キー制約を使用して、データの整合性を維持することをお勧めします。

于 2013-08-15T14:42:48.460 に答える