2009-08-26 44 views
2

這是我一天發生奇怪的錯誤。SQLCMD模式下的SSMS - 錯誤語法

我使用數據庫項目並且作爲Post部署的一部分,我們使用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的單詞。但是我得到那個錯誤..

Msg 102,Level 15,State 1,Line 234
'OFFSET'附近語法不正確。

這是怎麼回事?

+0

只是一個想法,但你檢查了它爲此運行的腳本? – 2009-08-26 13:49:15

+0

@Phil:我檢查了我的整個SQL目錄中的OFFSET這個詞,並沒有在任何地方找到它。 – 2009-08-26 14:18:38

回答

3

這baadddddddd

將串連命令一起從文件到文件

一個文件就這樣結束了

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.

+0

每個文件都沒有以「GO」行結束(GO後有CR/LF)嗎? – 2009-08-26 15:28:37

+0

哈哈。這是造成該問題的缺失/必需/必需/強制性CR/LF。 GO會有所作爲嗎?我認爲它會在GOSET而不是OFFSET上出錯。 – 2009-08-26 18:29:18

1

您是否檢查過腳本是否觸發了Script.EnableTriggers.sql?如果您不知道觸發代碼,請嘗試以下操作:

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

如果您發現任何問題,請告知我。

感謝, 埃裏克

+0

這是SQL 2008.我跑 - 選擇*從INFORMATION_SCHEMA.ROUTINES 其中ROUTINES.ROUTINE_BODY像'%OFFSET%'...但零行返回 – 2009-08-26 14:21:04

+0

對不起,我的意思是說sys.sql_module。這已被糾正。如果你使用例程,你不會得到觸發器定義,這是我們感興趣的。你可以嘗試上面的查詢嗎? – Anon246 2009-08-26 14:36:48

+0

@Strommy:它不是代碼模塊,而是SSMS本身的不良行爲。看看我的答案。 – 2009-08-26 14:42:48