在 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 都看不到。如果他们出错,您甚至无法跟踪查询。
我应该早点尝试的:
- 运行 作为用户的查询。 (我想,但它是一个管理员用户,当时其他人正在使用它。)
- 检查所有列信息与它们中的内容以及查询中的内容。然后检查该信息是如何到达那里的。在这种情况下,默认约束可能会给出相同的问题。
我遇到了一个非常奇怪的问题。我有 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 都看不到。如果他们出错,您甚至无法跟踪查询。
我应该早点尝试的:
- 运行 作为用户的查询。 (我想,但它是一个管理员用户,当时其他人正在使用它。)
- 检查所有列信息与它们中的内容以及查询中的内容。然后检查该信息是如何到达那里的。在这种情况下,默认约束可能会给出相同的问题。