调试SQL Server SQL

调试SQL Server SQL,sql,sql-server,tsql,Sql,Sql Server,Tsql,如果我有一个包含几十个联接的复杂查询,并且我得到了这条消息,我想知道如何调试(?),即错误消息中没有引用列名或行号: Msg 245,第16级,状态1,第1行 将varchar值“X”转换为数据类型smallint时,转换失败 我想我只是不断减少查询,直到它再次工作,然后逐位添加,直到再次出现错误。通常,这可以很容易地调试,就像您发现的那样-使用TRY\u CONVERT或TRY\u CAST 诸如此类: SELECT * FROM [dbo].[DataSource] WHERE TRY_CO

如果我有一个包含几十个联接的复杂查询,并且我得到了这条消息,我想知道如何调试(?),即错误消息中没有引用列名或行号:

Msg 245,第16级,状态1,第1行
将varchar值“X”转换为数据类型smallint时,转换失败


我想我只是不断减少查询,直到它再次工作,然后逐位添加,直到再次出现错误。

通常,这可以很容易地调试,就像您发现的那样-使用
TRY\u CONVERT
TRY\u CAST

诸如此类:

SELECT *
FROM [dbo].[DataSource]
WHERE TRY_CONVERT(SMALLINT, [MyTextColumn]) IS NULL;

这是一个数据问题。您正在执行一个CAST()或CONVERT(),尝试将VARCHAR值转换为SMALLINT,而VARCHAR中的值不是数字,或者转换后的结果值太大,无法放入SMALLINT。调试意味着找出哪些列正在进行转换,然后查看数据以找出导致转换的原因。您可以通过将正在处理的行数限制在较小的集合中来缩小范围,直到找到正在处理的数据区域。谢谢Ken!你的答案恰到好处。。。我试图更改我的CONVERT函数调用以尝试转换,但问题消失了。我将在数据表上执行数据配置文件工作(excel、公式和宏),以确定数据问题所在!