0

使用条件进行插入的语法如何?例如:验证我要插入的值是否不在表中?(考虑到该列可能为空)

4

5 回答 5

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 回答
2

您的描述非常简短,但听起来您想要MERGE声明。

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

可用于根据数据是否存在或不全部在一个语句中插入/更新/删除。

于 2013-08-15T14:40:07.557 回答
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 target_table (col1, col2, ...)
select col1, col2, ...
from source_table
where col_x not in (
    select col_y from target_tabke where col_y is not null)
or (col_x is null and not exists (
    select * from target_table where col_y is null))
于 2013-08-15T14:45:57.913 回答
0

你的意思是这样的吗?

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

但是,我建议您使用唯一索引、过滤索引或外键约束来维护数据完整性。

于 2013-08-15T14:42:48.460 回答