2017-05-26 80 views
0

我試圖讓光標在表中爲名稱創建登錄名,密碼和用戶名。除了臨時密碼外,我的一切都正常工作,這是登錄名的前四個,最後加上了9999。我已經正確地編碼了(我認爲),但是我在創建登錄時無法正常工作。它以「@Password」作爲密碼而不是BBro999。我知道這是因爲我有'''密碼'''',但我不能爲我的生活弄清楚如何編碼這將它作爲@Password拉入'BBro999'的位置。作爲用於@loginname使用光標創建登錄名和臨時密碼

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; 

回答

1

它應該是

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

或者

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

密碼應被引用,不是變量

+0

太棒了!我無法相信我沒有想到把報價移到其他地方。非常感謝。 – Krystianya

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

用引號相同

儘量選擇或打印語句查找什麼是存儲在@createlogin

選擇@Createlogin 或者 打印實際字符串@ Createlogin