我正在使用SSMS 2008R2连接到SQL 2012企业数据库(如果有的话)。根据下面的屏幕截图,您可以看到SSMS正在添加的大纲位于不正确的位置。有关如何确保大纲正常工作的任何想法?另外,当查询中发生错误时,错误中的行号绝不会与查询/文件中的行号对齐(关闭数百)。SSMS 2008 R2概述错误位置
我已经昏了一些字段,但我向你保证查询运行良好,因此选择语句的语法不是问题。
我正在使用SSMS 2008R2连接到SQL 2012企业数据库(如果有的话)。根据下面的屏幕截图,您可以看到SSMS正在添加的大纲位于不正确的位置。有关如何确保大纲正常工作的任何想法?另外,当查询中发生错误时,错误中的行号绝不会与查询/文件中的行号对齐(关闭数百)。SSMS 2008 R2概述错误位置
我已经昏了一些字段,但我向你保证查询运行良好,因此选择语句的语法不是问题。
一个简单的答案是你可以DOUBLE CLICK在SSMS中的错误消息,它会带你到实际的错误,无论是#是它说明错误是在匹配你看到SSMS内...通常。
有了这样说,这里有一些事情要牢记......
批
首先,每个批次将计入您的行号。运行下面的代码。它将在34行错误了,虽然错误是在39原因是我们采取了5行与前两批QUOTED_IDENTIFIER
和ANSI_NULLS
。如果您将这些注释掉,则会返回正确的行号。
选择具有WHERE/JOINS
如果你的错误是在某处你WHERE
和潜在的一个JOIN
,将返回的语句开头的行号。将前两批注释掉,取消注释底部的SELECT
,然后用0除以底部注释SET @testing = 'one'
。你会发现34号线是什么将错误,这是语句的开始返回,但实际的错误是在线路37
的错误选择
显然,错误的类型,我没有缩小 - 但不是水平和国家 - 影响行号。我不能告诉你为什么,但要记住这一点。在除以0的错误,如果你双击错误消息它会带你到SELECT语句与错误的实际行号。这是我在帖子顶部提到的“通常”条款。 这是一段代码片段。
SELECT
1/1,
1/2,
--a.b --Errors at the actual line
1/0 --Errors at the SELECT line number
WHERE
1=1
ERROR_LINE()
您可以使用ERROR_LINE()
返回错误行,但是这是要模仿你在SSMS的错误看到。所以如果你有多个批次,它将是“不正确的”。
周围工作?
也许数学......每个SELECT按照你的建议,根据错误,可以计为1行。因此,在代码中有一个计数器(每个选择的BATCH + 1)可以帮助您缩小潜在的错误。或者,如果它是一个过程,看看sp_helptext
代码以进行测试
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET NOCOUNT ON
SELECT
CASE
WHEN 1=1 THEN 1
ELSE 2
END
DECLARE @Testing int
SET @Testing = 1
IF @Testing = 1
BEGIN
SELECT
'Testing is set to 1'
END
ELSE
BEGIN
SELECT
'Testing is not set to 1'
END
--SELECT
--1
-- WHERE
--1 = @Testing/0
SET @Testing = 'one'
GO
你见过吗? http://stackoverflow.com/questions/4565614/how-can-i-get-the-actual-stored-procedure-line-number-from-an-error-message – scsimon
我见过类似的事情。我们不是在说1或2行 - 我们正在谈论数百行,而CREATE/ALTER语句之上没有那么多额外的东西。我相信这与系统评估1条select语句为1行有关,即使为了可读性(每场一行)而将语句分散到100行中。我认为虽然概述功能不应该关心这一点。 – thomas
你有很多if else begin语句吗?我注意到SSMS正如你所建议的那样评估它。 – scsimon