Sql server SQL Server 2012中仅注释的T-SQL上的SQL语法错误

Sql server SQL Server 2012中仅注释的T-SQL上的SQL语法错误,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我在使用SQL Server 2012在客户站点上安装时出错。我能够在SQLExpress 2012上本地重现语法错误。同样的DDL脚本在2008 R2下运行良好,但由于“44445附近的语法不正确”而失败 检查正在执行的SQL时,文本“44445”被注释掉。同样,这个SQL在2008 R2上工作。最后一行是语法违例者。注意,它被注释掉了,就像这个例子中的大多数一样 [snipped] IF NOT EXISTS (SELECT * FROM ::fn_listextendedprope

我在使用SQL Server 2012在客户站点上安装时出错。我能够在SQLExpress 2012上本地重现语法错误。同样的DDL脚本在2008 R2下运行良好,但由于“44445附近的语法不正确”而失败

检查正在执行的SQL时,文本“44445”被注释掉。同样,这个SQL在2008 R2上工作。最后一行是语法违例者。注意,它被注释掉了,就像这个例子中的大多数一样

[snipped]    
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'Updatable' , N'USER',N'dbo', N'TABLE',N'PublishLog', NULL,NULL))
EXEC dbo.sp_addextendedproperty @name=N'Updatable', @value=N'True' , @level0type=N'USER',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'PublishLog'
GO

--SET ANSI_NULLS ON
--GO
--SET QUOTED_IDENTIFIER ON
--GO
--IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[MetaData]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
--BEGIN
--CREATE TABLE [dbo].[MetaData](
--  [ID] [int] IDENTITY(1,1) NOT NULL,
--  [DataName] [nvarchar](255) NULL,
--  [DataDescription] [nvarchar](255) NULL,
-- CONSTRAINT [MetaData_PK] PRIMARY KEY NONCLUSTERED 
--(
--  [ID] ASC
--) ON [PRIMARY]
--) ON [PRIMARY]
--END
--GO

--SET ANSI_NULLS ON
--GO

--SET QUOTED_IDENTIFIER OFF
--GO

--IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[T_MetaData_DTrig]') AND OBJECTPROPERTY(id, N'IsTrigger') = 1)
--EXEC dbo.sp_executesql @statement = N'CREATE TRIGGER [dbo].[T_MetaData_DTrig] ON [dbo].[MetaData] FOR DELETE AS
--SET NOCOUNT ON
--/* * PREVENT DELETES IF DEPENDENT RECORDS IN ''DocumentsData'' */
--IF (SELECT COUNT(*) FROM deleted, DocumentsData WHERE (deleted.ID = DocumentsData.MetaTagsID)) > 0
--    BEGIN
--        RAISERROR 44445 ''The record can''''t be deleted or changed. Since related records exist in table ''''DocumentsData'''', referential integrity rules would be violated.''
--        ROLLBACK TRANSACTION
--    END

[snipped]

似乎raise错误语法已更改 2008 R2出现错误(id,msg)—— 对于2012年,其raiseerror(msg,id)——

所以在上面的例子中使用
RAISERROR('test',445,1)
是有效的


编辑-我刚刚检查过,并且
RAISERROR('test',44445,1)
在2008 R2中也起作用

他们停止了
RAISERROR
语法。现在,你“需要”父母

请阅读以下内容:


并搜索“RAISERROR”

您确定尝试在SQL Server 2012上运行时没有出现换行吗?您是否尝试使用
/**/相反?我检查了换行/隐藏和不可打印字符。删除注释代码后,DDL工作正常。我可以简单地删除代码并交付,但我很好奇是否有其他人看到过这种行为。“我读了你的两篇引文,没有发现其中的区别。msgid是可选的。在2012年的第二次引用中,示例A和C省略了仅依赖于状态和严重性的消息编号。示例B与我的代码类似。我所注意到的是,所有示例都使用了我代码中缺少的状态和严重性。除非它被注释掉,否则应该忽略。