开发者社区> 问答> 正文

使用变量创建数据库和用户脚本

我正在尝试创建一个SQL脚本,该脚本创建一个数据库,一个带密码的登录名,然后将该登录名添加到数据库中。

到目前为止,这就是我所拥有的。尝试执行带有错误的创建登录语句时失败

Msg 102,第15级,状态1,第1行

'login1'附近的语法不正确。

我以为它失败了,因为我需要在密码两边加上单引号,但是我不知道该怎么做。我怎样才能解决这个问题?

DECLARE @db varchar(50) = 'Database1';
DECLARE @userName varchar(50) = 'login1';
DECLARE @pwd varchar(50) = @userName;

DECLARE @createDb varchar(MAX);
DECLARE @createUser varchar(MAX);
DECLARE @useDb varchar(MAX);
DECLARE @addUserToTable varchar(MAX);
DECLARE @grantUserTablePrivileges varchar(MAX);


SET @createDb = 'CREATE DATABASE {DBNAME}';
SET @useDb = 'USE {DBNAME}';
SET @createUser = 'CREATE LOGIN {USERNAME} WITH PASSWORD = "{PWD}"';
SET @addUserToTable = 'CREATE USER {USERNAME} FOR LOGIN {USERNAME}';
SET @grantUserTablePrivileges =  'sp_addrolemember db_owner, {USERNAME}';

DECLARE @script varchar(MAX);

SET @script = REPLACE(@createDb, '{DBNAME}', @db);
PRINT(@script);
EXECUTE (@script);

SET @script = REPLACE(@createUser, '{USERNAME}', @userName);
SET @script = REPLACE(@script, '{PWD}', @pwd);
PRINT(@script);
EXECUTE (@script);

SET @script = REPLACE(@useDb, '{DBNAME}', @db);
PRINT(@script);
EXECUTE (@script);

SET @script = REPLACE(@addUserToTable, '{USERNAME}', @userName);
PRINT(@script);
EXECUTE (@script);

SET @script = REPLACE(@grantUserTablePrivileges, '{USERNAME}', @userName);
PRINT(@script);
EXECUTE (@script);

展开
收起
祖安文状元 2020-01-05 14:32:09 448 0
1 条回答
写回答
取消 提交回答
  • 需要在密码两边加上单引号

    SET @createUser = 'CREATE LOGIN {USERNAME} WITH PASSWORD = "{PWD}"';
    
    

    成为

    SET @createUser = 'CREATE LOGIN {USERNAME} WITH PASSWORD = ''{PWD}''';
    而```  
    且有效。
    2020-01-05 14:32:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载