什么可能导致SSMS无法正确解析SQL?

时间:2011-09-14 21:16:35

标签: ssms

这是我见过的最糟糕的事情。

我使用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   ' _partner_break_types'附近的语法不正确。

最奇怪的是,当我双击dbo.ms_lst_partner_break_types时,SSMS突出显示ms_lst_partner_break_types,具体取决于我点击的位置。将脚本复制到Textpad并返回,同样的问题。删除_partner_break_types然后突然就行了。

有没有人知道是什么给出了什么?

2 个答案:

答案 0 :(得分:1)

我不知道为什么会这样,但出于某种原因,Unicode字符0x1f被插入到脚本中。它可能是SSMS中的一个错误,但我认为不会轻易回答它。

答案 1 :(得分:-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选择“script as drop to new query window”。