gpt4 book ai didi

sql - 如何避免因 1 NULL 而导致整个 INSERT 批处理失败

转载 作者:行者123 更新时间:2023-12-04 22:24:06 25 4
gpt4 key购买 nike

我有一个带有主键的表和一个用于插入该表的存储过程。我无法控制存储过程,也无法更改它。有时该过程会返回许多记录和 1 个主键列为 NULL 值的记录。目前整批新行插入失败。

如何将我的代码或表格配置为仅在具有 NULL 值的第 1 行上失败,但允许插入其他行?

这是一些测试代码:

    IF OBJECT_ID('tempdb..#tbl') IS NOT NULL
DROP TABLE #tbl

CREATE TABLE #tbl (
col INT NOT NULL,
CONSTRAINT PK_tbl PRIMARY KEY (col ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

SET XACT_ABORT OFF

--Imagine this is the procedure that cannot be edited
insert into #tbl (col) values
(null), (1), (2)

--Ideally, the table would have 1 and 2
select * from #tbl

最佳答案

假设我们不是真的在谈论#temporary 表,您可以创建一个 instead of insert 触发器。

CREATE TRIGGER dbo.PreventNullsOnTableName
ON dbo.TableName
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;

INSERT dbo.TableName SELECT col1 FROM inserted WHERE col1 IS NOT NULL;
END
GO

您可能还想使用 GROUP BY col1 来防止 PK 违规,但这取决于您是想优雅地处理还是引发错误。

您还可以删除 NOT NULL 约束,而不是使用 PRIMARY KEY,而是创建一个唯一的过滤索引 WHERE col1 IS NOT NULL .

关于sql - 如何避免因 1 NULL 而导致整个 INSERT 批处理失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9302524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com