1

我正在尝试运行一个向 MSSQL 添加登录名的脚本,它包含两个 GO 命令,这两个命令都会产生错误:Msg 102 ...“GO”附近的语法不正确。以下示例代码在名为 MyDB 的数据库上运行

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);
4

1 回答 1

3

GO不是常规的 SQL 语句。来自MSDN

GO不是 Transact-SQL 语句;它是sqlcmdosql实用程序以及 SQL Server Management Studio 代码编辑器识别的命令。

尝试将其分解为多个调用,如下所示:

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);
于 2015-08-26T23:03:53.743 回答