2017-04-18 34 views
0

嘗試將兩個隨機字符添加到新創建的登錄名的末尾。所以我們說硬編碼的登錄名是'TestUser'。我希望能夠在'TestUser'末尾添加隨機字母和數字,因此它可以是'TestUser13'或'TestUserA5'。將隨機字符添加到新登錄中 - SQL Server

但是我收到一個語法錯誤:

Incorrect syntax near the keyword 'LEFT'.

下面是我的代碼,其中執行後會被返回的語法錯誤:

DECLARE @NewPassword VARCHAR(100) 
DECLARE @Sql   NVARCHAR(500) 
DECLARE @RandomChar  NVARCHAR(50) 

SET @RandomChar = N'SELECT LEFT(NEWID(), 2)' 
    EXEC sp_executesql @RandomChar 

--Calls function to generate random password 
EXEC @NewPassword = dbo.GenerateRndPassword 

--Creates login with random password 
SET @Sql = 'CREATE LOGIN TestUser' + @RandomChar + 'WITH PASSWORD = ''' + @NewPassword + ''', DEFAULT_DATABASE = [master], CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF' 

EXEC sp_executesql @Sql 

--PRINT @Sql 

SELECT 'TestUser' + @RandomChar AS Login 
SELECT @NewPassword AS Password 

任何人的幫助,將不勝感激。

回答

2

你必須要對兩個問題在這裏。首先,你必須將你的newid轉換成一個varchar,這樣你才能得到左邊的兩個字符。但這裏真的不需要動態sql。第二個問題是你需要WITH PASSWORD之前的空格。你的最終代碼看起來像這樣。

DECLARE @NewPassword VARCHAR(100) 
DECLARE @Sql   NVARCHAR(500) 
DECLARE @RandomChar  NVARCHAR(50) 

SELECT @RandomChar = LEFT(convert(varchar(50), NEWID()), 2) 

--Calls function to generate random password 
EXEC @NewPassword = dbo.GenerateRndPassword 

--Creates login with random password 
SET @Sql = 'CREATE LOGIN TestUser' + @RandomChar + ' WITH PASSWORD = ''' + @NewPassword + ''', DEFAULT_DATABASE = [master], CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF' 

EXEC sp_executesql @Sql 

--PRINT @Sql 

SELECT 'TestUser' + @RandomChar AS Login 
SELECT @NewPassword AS Password 
1

我認爲NEWID()需要轉換或轉換爲一個字符串,然後LEFT()才能對其進行操作。

(這真的應該是一個評論,但我沒有足夠的代表。)