在 Windows 服务中收到与预期不同的 SqlException

Receiving different SqlException in Windows service to expected

我遇到了一个非常奇怪的问题。我有 windows 服务失败,因为 SqlException: "String or binary data would be truncated." 用于 INSERT 语句。

现在这是一个需要解决的相当基本的错误,但它不是真正的错误。如果我直接在数据库上进行跟踪和 运行 查询 - 没有错误。 WAY 中的所有数据都小于数据库的限制。

我最终从查询中删除了一些必需的列,希望产生不同的错误:"Cannot insert the value NULL into column 'Type'"

但是我没有收到这个错误!我还在收到 "String or binary data would be truncated."

如果我运行直接在数据库上跟踪查询,我确实会收到此错误。

有人知道这里会发生什么吗?谢谢!

编辑添加 这是应该给我无法插入值错误的查询。另一个查询相同但参数更多:

declare @p4 int
set @p4=60029550
exec sp_executesql N'EXECUTE ssl_GetTTDVersionCallSeq 1, @TTDVersionIDVal OUTPUT
INSERT INTO TTDVersion(Task,ID) VALUES (@P0,@TTDVersionIDVal)',N'@P0 int,@TTDVersionIDVal int output',@P0=200003762,@TTDVersionIDVal=@p4 output
select @p4

找到了这个错误的原因。它根本不在上面发布的查询中。 table 上有一个设置 LastUpdatedBy 列的触发器。

大多数用户都有一个 4 个字符的用户名,但正在使用该服务的用户 运行 却没有。列限制为 4。

避免这个问题:

  • 触发器可能有问题。它们不会立即可见 - sp_help 'table' 甚至 return 都看不到。如果他们出错,您甚至无法跟踪查询。

我应该早点尝试的:

  • 运行 作为用户的查询。 (我想,但它是一个管理员用户,当时其他人正在使用它。)
  • 检查所有列信息与它们中的内容以及查询中的内容。然后检查该信息是如何到达那里的。在这种情况下,默认约束可能会给出相同的问题。