将多个记录插入表格时,我收到上述消息。足够公平,数据无效,无法插入。但是我怎么能告诉SQL插入所有有效的。
目前,当我收到此错误时,整个插入失败。但我希望SQL不插入无效行,但插入所有有效行。
我使用的语法与此类似
INSERT INTO myNewTable (columnName1, columnName2, columnName3)
SELECT myValue1, myValue2, myValue3
FROM myOldTable
我无法更改SQL以排除WHERE子句中的值,因为此数据库使用类似ETA的结构表,但如果此表配置不正确,则表示插入失败。
我想知道在插入之前是否有我可以先调用的设置或语句,就像将IDENTITY_INSERT设置为ON或其他内容
答案 0 :(得分:1)
假设myValue1
,myValue2
,myValue3
中的一个实际为NULL,并且表myNewTable
的某些列上存在NOT NULL约束,您只需选择那些使用WHERE
子句未违反约束的值。
INSERT INTO myNewTable (columnName1, columnName2, columnName3)
SELECT myValue1, myValue2, myValue3
FROM myOldTable
WHERE myValue1 IS NOT NULL; --myValue2 and myValue3 can also be added
--with OR if your table structure has those columns
--defined to be NOT NULL too
这里,您不必担心只插入有效值而忽略无效值,而只是完全避免使用无效值。这是一个更好的解决方案,而不是找到忽略约束违规的方法。
答案 1 :(得分:1)
您可以在目标表上创建一个过滤掉无效行的instead of trigger。
[int(x1) + int(x2) for x1,x2 in zip(l1, l2)]
结果:
create table dbo.T(ID int not null);
go
create trigger dbo.TT on dbo.T
instead of insert as
begin
insert into T(ID)
select ID
from inserted
where ID is not null;
end
go
insert into dbo.T values(1),(null);
select * from T;
答案 2 :(得分:0)
尝试这个
INSERT INTO myNewTable (columnName1, columnName2, columnName3)
SELECT myValue1, myValue2, myValue3
FROM myOldTable
where myValue1 is not null
and myValue2 is not null
and myValue3 is not null