2017-04-18 13 views
0

新しく作成されたログイン名の最後に2文字のランダムな文字を追加しようとしています。だから、ハードコードされたログイン名が 'TestUser'であるとしましょう。私は 'TestUser'の末尾にランダムな文字と数字を追加できるように、 'TestUser13'または 'TestUserA5'にすることができます。 新しいログイン - SQL Serverにランダムな文字を追加

は、しかし、私は構文エラーを取得しています:

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 

誰も助けをいただければ幸いです。

Incorrect syntax near the keyword 'LEFT'.

以下は、構文エラーが実行した後に返される私のコードです。

答えて

2

あなたはここで起こって二つの問題があります。まず、newidをvarcharに変換して、左の2文字を取得する必要があります。しかし、実際にはここでは動的SQLを必要としません。 2番目の問題は、「パスワードあり」の前にスペースが必要なことです。最終的なコードは次のようになります。

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()が操作できるように変換するか文字列にキャストする必要があると思います。

(これは本当にコメントであるべきだが、私は十分に担当者を持っていない。)

関連する問題