【问题标题】:SSMS in SQLCMD mode - Incorrect SyntaxSQLCMD 模式下的 SSMS - 语法不正确
【发布时间】:2010-11-23 00:15:42
【问题描述】:

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

我使用一个数据库项目,作为部署后的一部分,我们使用 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 行
“OFFSET”附近的语法不正确。

这是怎么回事?

【问题讨论】:

  • 只是一个想法,但您检查过它为此运行的脚本吗?
  • @Phil:我检查了整个 SQL 目录中的 OFFSET 一词,但在任何地方都没有找到。

标签: sql sql-server tsql ssms sqlcmd


【解决方案1】:

您是否检查过 Script.EnableTriggers.sql 中的触发器是否正在触发?如果你不知道你的触发代码,试试这个:

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

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

谢谢, 埃里克

【讨论】:

  • 这是 SQL 2008。我跑了 - select * from INFORMATION_SCHEMA.ROUTINES where ROUTINES.ROUTINE_BODY like '%OFFSET%' ...但返回零行
  • 对不起,我是说 sys.sql_module。这是纠正。如果你使用例程,你不会得到触发器定义,这是我们感兴趣的。你可以试试上面的查询吗?
  • @Strommy:它不是代码模块,而是 SSMS 本身的不良行为。看看我的回答。
【解决方案2】:

这很糟糕

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

一个文件以这种方式结束

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'.

太可怕了。

I just submitted a bug into Microsoft Connect.

【讨论】:

  • 每个文件不是以“GO”行结尾(GO 后有 CR/LF)吗?
  • 哈哈。这是导致问题的缺失/需要/必需/强制 CR/LF。 GO 会有所作为吗?我认为它会在 GOSET 而不是 OFFSET 上出错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多