0

我有这样的大 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 中哪个变量出错了?

4

3 回答 3

1

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

于 2013-08-19T20:21:56.247 回答
0

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

于 2013-08-19T20:21:38.720 回答
0

从来没听说过。但是,您可以尝试以下过程:

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

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

4) 如果问题继续存在,则存在第二个受影响的列。丢弃查询中存在的所有列,这些列执行得没有问题,加上刚刚发现的不正确的列,然后从 2) 上的这个集合重新开始。

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

于 2013-08-19T20:22:41.143 回答