这是我见过的最糟糕的事情。
我使用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
然后突然就行了。
有没有人知道是什么给出了什么?
答案 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”。