我正在使用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