Sql server 2008 SSMS 2008 R2在错误位置绘制大纲
我正在使用SSMS 2008R2连接到SQL 2012企业数据库(如果需要的话)。根据下面的屏幕截图,您可以看到SSMS正在添加的大纲位于错误的位置。有没有关于如何确保大纲正确工作的想法?此外,当查询中发生错误时,错误中的行号与查询/文件中的行号不对齐(以数百为单位) 我已经涂黑了一些字段,但我向您保证查询运行良好,因此select语句的语法不是问题。一个快速的答案是,您可以双击SSMS中的错误消息,它将带您进入实际错误,而不管行#它声明的错误是否与您在SSMS中看到的一致。。。通常 话虽如此,这里有一些事情要记住 批量 首先,每批都将根据您的行号计算。运行下面的代码。它将在第34行出错,尽管错误在第39行。原因是前两批Sql server 2008 SSMS 2008 R2在错误位置绘制大纲,sql-server-2008,code-folding,outlining,Sql Server 2008,Code Folding,Outlining,我正在使用SSMS 2008R2连接到SQL 2012企业数据库(如果需要的话)。根据下面的屏幕截图,您可以看到SSMS正在添加的大纲位于错误的位置。有没有关于如何确保大纲正确工作的想法?此外,当查询中发生错误时,错误中的行号与查询/文件中的行号不对齐(以数百为单位) 我已经涂黑了一些字段,但我向您保证查询运行良好,因此select语句的语法不是问题。一个快速的答案是,您可以双击SSMS中的错误消息,它将带您进入实际错误,而不管行#它声明的错误是否与您在SSMS中看到的一致。。。通常 话虽如此
QUOTED\u IDENTIFIER
和ANSI\u NULLS
占用了5行。如果将这些注释掉,将返回正确的行号
使用WHERE/join选择
如果您的错误在WHERE
中的某个地方,并且可能是连接
,则将返回语句开头的行号。注释掉前两个批次,取消注释底部我们除以0的SELECT
,注释掉底部的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
错误\u行()
您可以使用ERROR\u LINE()
返回错误行,但这将模拟您在SSMS中看到的错误。因此,如果您有多个批次,它将是“不正确的”
解决方案?
也许数学。。。根据错误的不同,您建议的每个选择都可以计为一行。因此,在代码中设置一个行计数器(每选择一行,批处理+1)可以帮助您缩小潜在的错误范围。或者,如果这是一个过程,请查看sp\u 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
一个快速的答案是,您可以双击SSMS中的错误消息,它将引导您找到实际错误,无论这行内容是否与您在SSMS中看到的内容相匹配。。。通常
话虽如此,这里有一些事情要记住
批量
首先,每批都将根据您的行号计算。运行下面的代码。它将在第34行出错,尽管错误在第39行。原因是前两批QUOTED\u IDENTIFIER
和ANSI\u NULLS
占用了5行。如果将这些注释掉,将返回正确的行号
使用WHERE/join选择
如果您的错误在WHERE
中的某个地方,并且可能是连接
,则将返回语句开头的行号。注释掉前两个批次,取消注释底部我们除以0的SELECT
,注释掉底部的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
错误\u行()
您可以使用ERROR\u LINE()
返回错误行,但这将模拟您在SSMS中看到的错误。因此,如果您有多个批次,它将是“不正确的”
解决方案?
也许数学。。。根据错误的不同,您建议的每个选择都可以计为一行。因此,在代码中设置一个行计数器(每选择一行,批处理+1)可以帮助您缩小潜在的错误范围。或者,如果这是一个过程,请查看sp\u 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
你看到这个了吗?我见过类似的事情。我们说的不是一两行,而是数百行,在CREATE/ALTER语句上面没有太多额外的内容。我相信这与系统将一条select语句作为一行进行评估有关,即使为了可读性(每个字段一行),该语句分布在100行上。我认为大纲功能不应该关心这个问题。你有很多if-else-begin语句吗?我注意到SSM按照您的建议对其进行了评估。我确实有很多,是的。大纲对我来说更重要,因为程序中的代码越来越长。然而,随着代码的增长,大纲绘制开始失败。哦,好吧,我将把它记为SSMS错误。谢谢你确认你看到了同样的东西。我的意思是没有@thomas Sorry自动更正我的手机。过几天我会做些测试你看到这个了吗?我见过类似的事情。我们不是在说1或2林