Updating Table Column with Random Passwords

I have a stored Procedure that generates random passwords. I have a user table with a password column. Some users have Null or Empty password fields. I would like to write a script that fills these empty or NULL fields with a randomly generated password from the stored procedure
greatseatsAsked:
Who is Participating?
 
Kevin CrossChief Technology OfficerCommented:
Could you change to a user defined function?

If so, then you can call like this:
UPDATE users
SET password = dbo.fn_GetRandomPassword()
WHERE IsNull(password, '') = ''

Open in new window

0
 
Kevin CrossChief Technology OfficerCommented:
Or if you are doing this in the stored procedure, you can take an approach something like this.
DECLARE @userid int -- whatever your identity column type is
 
WHILE EXISTS (SELECT 1 FROM users WHERE IsNull(password, '') = '')
BEGIN
    -- grab next user to work on
    SELECT TOP 1 @userid = userid FROM users WHERE IsNull(password, '') = ''
    -- use your logic you already have for password here
 
    -- update this user
    UPDATE users
    SET password = @password -- set to password you have already calc
    WHERE userid = @userid
END

Open in new window

0
 
nmcdermaidCommented:
Assuming the SP returns the password as an output parameter, something like this will do it.
Alternatively you coudl load up a table with passwords generated by your SP and then apply them.
 

DECLARE @Password VARCHAR(100)
DECLARE @UserName VARCHAR(100)
 
SELECT @UserName = TOP 1 UserNameColumn FROM YourTable WHERE PasswordColumn IS NULL -- seed the loop
 
WHILE @UserName IS NOT NULL
BEGIN
 
  EXEC p_YourProcedure @Password OUTPUT  -- get the next random password
  
  -- Apply the password (assuming UserNameColumn is unique)
  UPDATE YourTable 
  SET PasswordColumn = @Password
  WHERE UserNameColumn = @UserName
 
  SELECT @UserName = TOP 1 UserNameColumn FROM YourTable WHERE PasswordColumn IS NULL
END

Open in new window

0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
greatseatsAuthor Commented:
I get the following error when i try to execute this script.

Msg 156, Level 15, State 1, Line 4
Incorrect syntax near the keyword 'TOP'.
Msg 156, Level 15, State 1, Line 16
Incorrect syntax near the keyword 'TOP'.

do you know what this is about ?


DECLARE @Password VARCHAR(100)
DECLARE @UserName VARCHAR(100)
 
SELECT @UserName = TOP 1 UserNameColumn FROM YourTable WHERE PasswordColumn IS NULL -- seed the loop
 
WHILE @UserName IS NOT NULL
BEGIN
 
  EXEC p_YourProcedure @Password OUTPUT  -- get the next random password
  
  -- Apply the password (assuming UserNameColumn is unique)
  UPDATE YourTable 
  SET PasswordColumn = @Password
  WHERE UserNameColumn = @UserName
 
  SELECT @UserName = TOP 1 UserNameColumn FROM YourTable WHERE PasswordColumn IS NULL
END

Open in new window

0
 
Kevin CrossChief Technology OfficerCommented:
It has to be like in my comment.
SELECT TOP 1 @userid = userid FROM users WHERE IsNull(password, '') = ''

The TOP 1 must come before the assignment to variable.
0
 
Kevin CrossChief Technology OfficerCommented:
Here is a blend of the approaches since you liked that one.  Since you said password can be empty or NULL I would also change to my approach of comparing to empty string after changing nulls to '' that way you catch both.
DECLARE @Password VARCHAR(100)
DECLARE @UserName VARCHAR(100)
 
SELECT TOP 1 @UserName = UserNameColumn FROM YourTable WHERE IsNull(PasswordColumn, '') = ''
 
WHILE @UserName IS NOT NULL
BEGIN
   EXEC p_YourProcedure @Password OUTPUT  -- get the next random password
  
  -- Apply the password (assuming UserNameColumn is unique)
  UPDATE YourTable 
  SET PasswordColumn = @Password
  WHERE UserNameColumn = @UserName
 
  -- grab next username
  SELECT TOP 1 @UserName = UserNameColumn FROM YourTable WHERE IsNull(PasswordColumn, '') = ''
END

Open in new window

0
 
nmcdermaidCommented:
Sorry I got the TOP 1 around the wrong way. Its not needed anyway.
0
 
greatseatsAuthor Commented:
I really like this UDF approach, fast, clean and simple - well I had to learn more about UDF and how to create a udf password generator :-) - fun ! I am still trying to get the other SP approaches to work - running into a few issues - Thanks  very much for the assistance
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.