在sql 2008脚本中查明特定的变量错误

时间:2013-08-19 20:16:08

标签: sql sql-server sql-server-2008

我有像这样的大SQL查询:

Select Distinct [Student].[Class].roll_nbr as [PERIOD-NBR],[Student].[Class].ent_nbr as [CLASS-NBR],
  IsNull(Stuff((SELECT CAST(', ' AS Varchar(MAX)) + CAST([Student].[Subject].ent_nbr AS Varchar(MAX))
FROM [Student].[Subject]
WHERE [Student].[Subject].roll_nbr = [Student].[Class].roll_nbr
and ([Student].[Subject].class_nbr = [Student].[Class].roll_assignment_nbr
     or ([Student].[Class].roll_assignment_nbr = '0'
     and [Student].[Subject].class_nbr = [Student].[School].bus_stop) )
AND [Student].[Subject].ent_nbr <> ''
FOR XML PATH ('')), 1, 2, ''), '')
AS [OLD-STUDENT-NBR.OLD],IsNull(Stuff((SELECT CAST(', ' AS Varchar(MAX)) + ....

它继续和页面长查询,它构建一个报告。我遇到的问题是一些变量错误地显示消息:

Error converting data type varchar to numeric.

这是非常通用的错误,不告诉我哪个变量。有没有办法确定哪个变量在sql 2008中出错?

3 个答案:

答案 0 :(得分:1)

注释掉一半列,如果错误继续,则注释掉另一半。如果错误停止,则它位于您刚刚注释掉的部分中。冲洗重复。

答案 1 :(得分:0)

在过去遇到这种类型的错误时,我通过注释掉部分查询来缩小它,查看它是否执行,然后取消注释部分查询,直到它指向错误。

答案 2 :(得分:0)

不是我知道的。但是,您可以尝试以下过程:

1)确定要转换的列 2)用一半执行选择。如果它执行得很好,则问题出在另一半 3)重复2(将列数减半),直到找到一个候选人。

如果查询执行时间很长,请跟踪所有尝试的组合及其结果,因为问题可能会影响多个列。这导致:

4)如果问题仍然存在,则会有第二个受影响的列。丢弃已经执行但没有问题的查询中的所有列,加上刚刚发现的错误的列,并在2)上重新开始。

5)重复直到原始查询(和必要的修改)执行而没有问题。