【问题标题】:SSMS 2008 R2 Outlining At Incorrect PlaceSSMS 2008 R2 大纲在不正确的位置
【发布时间】:2016-11-24 02:44:07
【问题描述】:

我正在使用 SSMS 2008R2 连接到 SQL 2012 Enterprise 数据库(如果重要的话)。根据下面的屏幕截图,您可以看到 SSMS 添加的大纲位置不正确。关于如何确保大纲正常工作的任何想法?此外,当查询中发生错误时,错误中的行号绝不会与查询/文件中的行号对齐(相差数百)。

我已将一些字段涂黑,但我向您保证查询运行良好,因此 select 语句的语法不是问题。

【问题讨论】:

  • 我见过类似的事情。我们说的不是 1 或 2 行——我们说的是数百行,在 CREATE/ALTER 语句之上没有那么多额外的东西。我相信这与系统将 1 个 select 语句评估为 1 行有关,即使该语句为了可读性而分布在 100 行中(每个字段一行)。我认为虽然大纲功能不应该关心这一点。
  • 你有很多 if else begin 语句吗?我注意到 SSMS 按照您的建议对其进行了评估。
  • 我确实有很多,是的。随着 proc 中的代码变得更长,概述(对我来说)更重要。然而,随着代码的增长,大纲开始失败。哦,好吧,我会把它归结为一个 SSMS 错误。感谢您确认您看到了相同的内容。
  • 我的意思是我的手机没有@thomas 抱歉自动更正。过一会儿我会进行一些测试

标签: sql-server-2008 code-folding outlining


【解决方案1】:

一个快速的答案是,您可以双击 SSMS 中的错误消息,它会将您带到实际错误,无论它说明错误的行#是否与您在里面看到的内容相匹配SSMS...通常。

话虽如此,这里有一些事情要记住......

批处理

首先,每个 BATCH 都将计入您的行号。运行下面的代码。它将在第 34 行出错,尽管错误在第 39 行。原因是前两批 QUOTED_IDENTIFIERANSI_NULLS 占用了 5 行。如果将这些注释掉,将返回正确的行号。

用 WHERE / JOINS 选择

如果您的错误位于 WHERE 中的某个位置,并且可能是 JOIN,则将返回语句开头的行号。注释掉前两个批次,取消注释底部我们除以0的SELECT,注释掉底部的SET @testing = 'one'。您会注意到第 34 行将在 Error 中返回,这是语句的开头,但实际错误在第 37 行。

选择错误

显然,我没有缩小范围的错误类型——但不是级别和状态——会影响行号。我不能告诉你为什么,但要记住这一点。在除以 0 错误中,如果您双击错误消息,它将带您进入 SELECT 语句与错误的实际行号。这是我在帖子顶部提到的“通常”条款。 这是一个代码sn-p。

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

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 2013-10-12
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    相关资源
    最近更新 更多