2011-09-14 42 views
0

這是我見過的最殘酷的事情。什麼可能導致SSMS無法正確解析SQL?

我從一個使用SYSNAME作爲參數類型的模板創建了一個proc。從參數中獲取名稱的proc的所有部分都是拋出錯誤。下面是一個示例:

IF EXISTS(select 1 from sysobjects where name=N'dbo.ms_lst_partner_break_types' and xtype='p') 
BEGIN 
PRINT 'DROP PROCEDURE dbo.ms_lst_partner_break_types' 
DROP PROCEDURE dbo.ms_lst_partner_break_types 
END 

以下是錯誤:

Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '_partner_break_types'.

最奇怪的是,當我雙擊dbo.ms_lst_partner_break_types SSMS凸顯要麼ms_lst_partner_break_types不同的地方我點擊。將腳本複製到Textpad並返回,同樣的問題。刪除_partner_break_types並突然它有效。

有沒有人有任何想法是什麼給?

+0

[我見過類似的問題](http://stackoverflow.com/questions/5276138/weird-behaviour-of-management-studio/5276295#5276295)當字符0結束在文本中,但也打破了複製和粘貼。將代碼粘貼到這個問題中沒有問題? –

+0

是否有人可能會與您的批分隔符混淆?工具/選項/查詢執行/ SQL Server /常規。 –

+1

作爲一個方面說明,'sysobjects'中的'name'不會包含名稱的'dbo.'模式部分,所以你永遠不會找到'name = N'dbo.ms_lst_partner_break_types'' –

回答

-2

在SQL Server 2008中,它是sys.objects。此外,現場看的「姓名」是不同的,以及其他一般語法:

IF EXISTS (SELECT * 
      FROM sys.objects 
      WHERE object_id = OBJECT_ID(N'[dbo].[my_proc]') 
        AND type in (N'P', N'PC')) 

做的最簡單的辦法是右鍵單擊SP並選擇「腳本下降到新的查詢窗口「通過上下文菜單heirarchy。

+0

'sysobjects'仍然存在,即使它不是不正確的語法。 –

+3

這不是一個答案。 –

+2

無論是sys.objects還是sysobjects都不會影響導致腳本錯誤的中斷,幻影字符。 – Wil

1

我不知道它爲什麼發生,但由於某種原因,Unicode字符0x1f被插入到腳本中。這可能是SSMS中的一個錯誤,但我不認爲它會很容易回答。

相關問題