1

J'essaye d'exécuter un script qui ajoute un login à MSSQL il inclut deux commandes GO, qui produisent toutes les deux l'erreur: Msg 102 ... Syntaxe incorrecte près de 'GO'. Le code exemple suivant fonctionne sur une base de données nommée MyDBQuelle est la bonne syntaxe de "GO" dans MSSQL?

DECLARE @currentUsername varchar(30); 
DECLARE @password varchar(10); 
SET @currentUsername = 'thisisatest'; 
SET @password = 'mypassword13'; 

DECLARE @addUser varchar(1000); 
SET @addUser = ' 
    CREATE LOGIN ' + @currentUsername + ' 
    WITH PASSWORD = ''' + @password + ''', 
    DEFAULT_DATABASE = [MyDB] 
    GO 
    USE MyDB 
    CREATE USER ' + @currentUsername + ' FOR LOGIN ' + @currentUsername + ' 
    EXEC sp_addrolemember ''db_datareader'', ''' + @currentUsername + ''' 
    EXEC sp_addrolemember ''db_datawriter'', ''' + @currentUsername + ''' 
    GO 
'; 
PRINT @addUser; 
EXEC (@addUser); 
+0

Il ne peut pas être le mot aller, mais quelque chose près ce qui a une syntaxe incorrecte. Peut être lié à des guillemets intégrés. – dinomix

+3

GO est un terminateur de lot qui ne fait pas partie de T-SQL. Voir http://stackoverflow.com/questions/32212077/the-proper-use-of-mssql-go-in-vba/32212122#32212122 – lad2025

+0

Merci. Je suis relativement nouveau à MSSQL. Je vois le mot-clé GO partout dans les scripts. – AaronF

Répondre

3

GO n'est pas une déclaration régulière SQL. De MSDN:

GO is not a Transact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management Studio Code editor.

Essayez le découper en plusieurs appels comme ceci:

DECLARE @currentUsername varchar(30); 
DECLARE @password varchar(10); 
SET @currentUsername = 'thisisatest'; 
SET @password = 'mypassword13'; 

DECLARE @addUser varchar(1000); 
SET @addUser = ' 
    CREATE LOGIN ' + @currentUsername + ' 
    WITH PASSWORD = ''' + @password + ''', 
    DEFAULT_DATABASE = [MyDB] 
'; 
PRINT @addUser; 
EXEC (@addUser); 

SET @addUser = ' 
    USE MyDB 
    CREATE USER ' + @currentUsername + ' FOR LOGIN ' + @currentUsername + ' 
    EXEC sp_addrolemember ''db_datareader'', ''' + @currentUsername + ''' 
    EXEC sp_addrolemember ''db_datawriter'', ''' + @currentUsername + ''' 
'; 
PRINT @addUser; 
EXEC (@addUser);