在Windows服务中接收到预期

时间:2017-03-22 14:13:56

标签: c# sql-server windows-services sqlexception

我有一个非常奇怪的问题。我有Windows服务,由于SqlException失败:“字符串或二进制数据将被截断。”对于INSERT语句。

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

我最终从查询中取出了一些必需的列,希望生成一个不同的错误:“无法将值NULL插入列'Type'”

但是我没有收到此错误!我仍然得到“字符串或二进制数据将被截断。”

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

有没有人对这里可能发生的事情有任何想法?谢谢!

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

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

1 个答案:

答案 0 :(得分:0)

找到此错误的原因。在上面发布的查询中根本没有。表上有一个触发器,用于设置LastUpdatedBy列。

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

避免此问题:

  • 触发器可能会有问题。它们不会立即可见 - sp_help' table'甚至没有归还他们。如果他们出错,您甚至无法追踪查询。

我之前应该尝试的内容:

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