使用条件进行插入的语法如何?例如:验证我要插入的值是否不在表中?(考虑到该列可能为空)
问问题
113 次
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 回答