【问题标题】:INSERT executes without error but no record added into tableINSERT 执行没有错误,但没有记录添加到表中
【发布时间】: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


【解决方案1】:

你可以试试这个方法,
此处传递的值认为这是一个简单的示例指向,因此为简单起见在此处声明它们本身。希望你能动态获得这些。

DECLARE @_MyTable TABLE (ID INT , Text NVARCHAR(64))

DECLARE @_ID_Value1 INT = 1234 ;
DECLARE @_ID_Value2 INT = 1235 ;
DECLARE @_ID_Value3 INT = 1236 ;
DECLARE @_ID_Value4 INT = 1237 ;

INSERT INTO @_MyTable
VALUES
(@_ID_Value1, 'This is text1'),
(@_ID_Value2, 'This is text2'),
(@_ID_Value3, 'This is text3'),
(@_ID_Value4, 'This is text4')
SELECT * FROM @_MyTable

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多