2

这是我犯奇怪错误的日子。

我使用一个数据库项目,作为 Post Deployment 的一部分,我们使用 SQL 脚本来填充表中的数据。

alter authorization on database::atlas to sa;
go
ALTER DATABASE ATLAS SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO

:r C:\Scripts\Script.DisableTriggers.sql
:r C:\Scripts\dbo\Script.dbo.PaymentMethod.sql
:r C:\Scripts\dbo\Script.dbo.TransactionEntryMethod.sql
:r C:\Scripts\dbo\Script.dbo.TransactionTypeGroup.sql
:r C:\Scripts\dbo\Script.dbo.TransactionType.sql
:r C:\Scripts\Script.EnableTriggers.sql

这些脚本中的每一个都与以下脚本非常相似

SET IDENTITY_INSERT [dbo].[TransactionTypeGroup] ON
INSERT INTO [dbo].[TransactionTypeGroup] (TransactionTypeGroupID,TransactionTypeGroupName) VALUES 
(1,'Inquiry')
, (2,'Points')
, (3,'Board')
, (4,'Guest Meals')
, (5,'Cash Equivalency')
, (6,'Deposits')
, (7,'Void/Void Tender')
, (8,'Refund')
SET IDENTITY_INSERT [dbo].[TransactionTypeGroup] OFF
GO

当我得到我的输出时,我收到以下错误:

(1 row(s) affected)

(1 row(s) affected)

(25 row(s) affected)

(11 row(s) affected)

(2 row(s) affected)

(598 row(s) affected)

(3 row(s) affected)
Msg 102, Level 15, State 1, Line 234
Incorrect syntax near 'OFFSET'.

我搜索了整个 SQL 目录,在任何 SQL 文件或我发出的任何命令中都没有名为 OFFSET 的词。但是我得到了那个错误..

消息 102,级别 15,状态 1,第 234 行
“偏移”附近的语法不正确。

这里发生了什么?

4

2 回答 2

3

这是坏的

它将命令从一个文件连接到另一个文件

一个文件以这种方式结束

SET IDENTITY_INSERT TABLEONE OFF

下一个文件以这种方式开始

SET IDENTITY_INSERT TABLETWO ON

但是第一个文件在 SET IDENTITYINSERT OFF 之后没有空行。

SSMS 将这两个文件放在一起并执行它们,因此输出变为

SET IDENTITY_INSERT TABLEONE OFFSET IDENTITY_INSERT TABLETWO ON

这就是这个错误出现的原因

Msg 102, Level 15, State 1, Line 234
Incorrect syntax near 'OFFSET'.

太可怕了。

我刚刚向 Microsoft Connect 提交了一个错误。

于 2009-08-26T14:41:39.423 回答
1

您是否检查过触发器是否在 Script.EnableTriggers.sql 中触发?如果您不知道触发代码,请尝试以下操作:

select * from sys.sql_modules where definition like '%OFFSET%'

如果你发现什么,请告诉我。

谢谢,埃里克

于 2009-08-26T13:50:43.587 回答