我正在尝试让光标为表中的名称创建登录名,密码和用户名。我有一切正常工作,除了临时密码,这是登录名的前四个,最后加上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;
答案 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