2009-08-26 8 views
2

C'est ma journée pour des erreurs bizarres. J'utilise un projet de base de données et, dans le cadre de Post Deployment, nous utilisons des scripts SQL pour remplir les données de nos tables.SSMS en mode SQLCMD - Syntaxe incorrecte

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 

chacun de ces scripts est très similaire à celui ci-dessous

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 

Quand je reçois ma sortie arrière, je reçois l'erreur suivante:

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

J'ai cherché toute ma Répertoire SQL, et il n'y a pas de mot appelé OFFSET dans un fichier SQL ou dans toute commande que je publie. Mais pourtant je reçois cette erreur ..

Msg 102, niveau 15, état 1, ligne 234
syntaxe incorrecte près de 'OFFSET'.

Que se passe-t-il ici?

+0

juste une pensée, mais avez-vous vérifié les scripts qu'il exécute pour cela? –

+0

@Phil: J'ai vérifié tout le répertoire SQL pour le mot OFFSET et je ne l'ai trouvé nulle part. –

Répondre

3

Ceci est baadddddddd

Il concaténer les commandes ainsi que d'un fichier à

Un fichier a terminé cette façon

SET IDENTITY_INSERT TABLEONE OFF 

fichier suivant a commencé cette façon

SET IDENTITY_INSERT TABLETWO ON 

Mais le premier fichier n'a pas une ligne vide après SET IDENTITYINSERT OFF.

SSMS était de mettre les deux fichiers ensemble et de les exécuter, de sorte que la sortie est devenu

SET IDENTITY_INSERT TABLEONE OFFSET IDENTITY_INSERT TABLETWO ON 

et voilà comment cette erreur est venu

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

Affreux.

I just submitted a bug into Microsoft Connect.

+0

Chaque fichier ne se termine pas avec une ligne "GO" (avec CR/LF après le GO)? –

+0

LOL. C'était le CR/LF/manquant/requis/requis/obligatoire qui causait le problème. GO aurait-il fait une différence? Je pense qu'il aurait erré sur GOSET au lieu de OFFSET. –

1

Avez-vous vérifié si un déclencheur se déclenche dans Script.EnableTriggers.sql? Si vous ne connaissez pas votre code de déclenchement, essayez ceci:

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

Laissez-moi savoir si vous trouvez quoi que ce soit.

Merci, Eric

+0

C'est SQL 2008. J'ai couru - sélectionnez * from INFORMATION_SCHEMA.ROUTINES où ROUTINES.ROUTINE_BODY aime '% OFFSET%' ... mais zéro lignes retournées –

+0

Désolé, je voulais dire sys.sql_module. Ceci est corrigé. Si vous utilisez des routines, vous n'obtenez pas de définitions de trigger, ce qui nous intéresse. Pouvez-vous essayer la requête ci-dessus? – Anon246

+0

@Strommy: ce n'était pas un module de code, mais un mauvais comportement de SSMS lui-même. Découvrez ma réponse. –

Questions connexes