在我现在工作的一家公司的全球 DBA 的无限智慧中,他创建了一个表,该表采用 int 作为 ID 字段,但不会自动递增数字。
我正在传递来自 .Net 的表值参数,因为它在任何时间都会传递大约 100 行或更多行数据,并且我不想终止应用程序、破坏网络或 SQL Server。
这是我的存储过程
CREATE PROCEDURE sp_Insert_Supporting_Error_Info
(@tvp [dbo].udt_CEQZW READONLY)
as
begin
INSERT INTO CEQZW
ERROR_VAR_ID,
ERROR_ID,
ERROR_VAR_TYPE_CD,
ERROR_VAR_VALUE)
SELECT (SELECT coalesce(MAX(ERROR_VAR_ID), 0) + row_number() over (order by
(select NULL)) FROM CEQZW) as ERROR_VAR_ID,
ERROR_ID,
ERROR_VAR_TYPE_CD,
ERROR_VAR_VALUE FROM @TVP
end
go
我希望这个SELECT coalesce(MAX(ERROR_VAR_ID), 0) + row_number() over (order by (select NULL)) FROM CEQZW
当我用这个测试时,我会如何做这个技巧
declare @p3 dbo.udt_CEQZW
insert into @p3 values(1,N'es',N'test')
insert into @p3 values(1,N'ec',N'test')
insert into @p3 values(1,N'ec',N'test')
insert into @p3 values(1,N'ses',N'test')
insert into @p3 values(1,N'es',N'test')
exec sp_Insert_Supporting_Error_Info @p3
这就是我得到的
(受影响的 1 行)
(受影响的 1 行)
(受影响的 1 行)
(受影响的 1 行)
(受影响的 1 行)
消息 2627,级别 14,状态 1,过程 sp_Insert_Supporting_Error_Info,第 9 行
违反主键约束“PK_CEQZW”。无法在对象“dbo.CEQZW”中插入重复的键。重复的键值为 (1)。
该语句已终止。
所以我的问题是,除了敲击网络、应用程序和 SQL Server 自动增量并将 ID 添加到表中之外,我该怎么做