使用光标创建登录名和临时密码

时间:2017-05-26 02:56:04

标签: sql sql-server

我正在尝试让光标为表中的名称创建登录名,密码和用户名。我有一切正常工作,除了临时密码,这是登录名的前四个,最后加上9999。我已正确编码(我认为),但在创建登录时我无法正常工作。它将'@Password'作为密码而不是BBro999。我知道这是因为我有'''@ Password'''作为密码,但我不能在我的生活中弄清楚如何将它编码到它将把'BBro999'作为@Password。

USE AP

DECLARE
    @CreateLogin    varchar(256),
    @LoginName      varchar(20),
    @Password       char(20);

DECLARE Login_Cursor CURSOR
    Dynamic

FOR

SELECT DISTINCT*
    FROM NewLogins;

OPEN Login_Cursor;

FETCH NEXT FROM Login_Cursor INTO @LoginName;
    WHILE @@FETCH_STATUS = 0

BEGIN
    SET @Password = LEFT(@LoginName, 4) + '9999';
    SET @CreateLogin = 'CREATE LOGIN ' + @LoginName + ' ' + 'WITH PASSWORD = ' + '''@Password'''+ ','+ ' ' + 'DEFAULT_DATABASE = AP';

EXEC (@CreateLogin);

SET @CreateLogin = 'CREATE USER ' + @LoginName + ' ' + 'FOR LOGIN ' + @LoginName;

EXEC (@CreateLogin);

SET @CreateLogin = 'ALTER ROLE PaymentEntry ADD MEMBER ' + @LoginName;

EXEC (@CreateLogin);

FETCH NEXT FROM Login_Cursor
    INTO @LoginName;

END;

CLOSE Login_Cursor;

DEALLOCATE Login_Cursor;

2 个答案:

答案 0 :(得分:1)

应该是

    SET @CreateLogin = 'CREATE LOGIN ' + @LoginName + ' ' + 'WITH PASSWORD = ''' + @Password+ ''','+ ' ' + 'DEFAULT_DATABASE = AP';

或者

    SET @CreateLogin = 'CREATE LOGIN ' + @LoginName + ' ' + 'WITH PASSWORD = ' + quotename(@Password, '''') +','+ ' ' + 'DEFAULT_DATABASE = AP';

应引用密码,而不是变量

答案 1 :(得分:0)

  SET @CreateLogin = 'CREATE LOGIN ' + @LoginName + ' ' + 'WITH PASSWORD = ' + 
  @Password+ ','+ ' ' + 'DEFAULT_DATABASE = AP'; 

使用与@loginname

相同的引号

尝试使用select或Print语句查找存储在@createlogin

中的实际字符串

选择@Createlogin 要么 打印@Createlogin

相关问题