【发布时间】:2022-07-27 08:35:25
【问题描述】:
我有一个大表,在某些条件下,我需要在其中插入一些记录(由于逻辑的性质,一个接一个)。
表格的结构可以简化如下:
DECLARE @_MyTable TABLE (ID INT , Text NVARCHAR(64)) ;
对于这个表,有 3 个索引,它们都不是唯一的。
以一致的方式,使用 ID 字段的特定值运行插入命令会成功完成(即没有错误消息并且插入的记录显示在 SELECT 中),但 ID 的特定值除外。 例如,当 ID 为 1234 或 1236 时,插入记录没有任何问题。但是,如果使用 1235 运行相同的插入,则执行完成且没有错误条件但没有插入记录。
为了测试它并确保我没有输入错误,我使用了以下脚本:
DECLARE @_MyTable TABLE (ID INT , Text NVARCHAR(64)) ;
DECLARE @_ID_Value INT = 1234 ;
INSERT INTO @_MyTable (ID , Text )
VALUES (@_ID_Value , 'This is text') ;
如前所述,运行此脚本为变量 @_ID_Value 分配不同的值没有任何问题,除非值为 1235(该值当然只是一个示例)。
我应该尝试哪种解决方案或调试方法?
【问题讨论】:
-
你能发布一个完全重现这个的例子吗?
-
您的桌子上有触发器吗?我可以向您保证,如果您的插入语句完成且没有错误,则表明该行已插入到表中。也许你的代码有一个 try/catch 块和一个可以吞下错误的 catch 块?正如现在发布的那样,这是不可能回答的。
-
@EdmCoff,感谢您解决我的问题。实际的代码是一个相当大而复杂的过程。在该过程中,我尝试设置硬编码(而不是使用变量)ID,并且行为与描述完全相同(初始帖子中包含的简化版本。
-
@SeanLange,确实有一个触发器附加到表,但它目前被禁用。 Try-catch:是的,在触发器中,但如前所述,目前已禁用。
-
您没有想到它可以回滚的地方?我知道你说触发器被禁用,但也许它在实际插入时并没有失败,而是在之后回滚?
标签: sql-server