Thursday, March 26, 2015

cursor

I think you want a random table. It just so happens, I have a nifty script for that. Check this out:



DECLARE @randomTable TABLE (id INT IDENTITY, firstName VARCHAR(20), lastName VARCHAR(20), address VARCHAR(30), age INT, birthdate date, sex CHAR(1))
DECLARE @i INT = 0, @x INT = 0
DECLARE @rndFirstNameStr VARCHAR(20) = '', @rndLastNameStr VARCHAR(20) = '', @rndAddressStr VARCHAR(30) = ''
DECLARE @rndInteger INT = 0
DECLARE @rndDate date
DECLARE @streetSuffix TABLE (id INT IDENTITY, suffix CHAR(3))

SET NOCOUNT ON
INSERT INTO @streetSuffix (suffix) VALUES ('St'),('Rd'),('Dr'),('Ave')
WHILE @i < 5000
BEGIN

SET @x = ROUND(((15 - 10 -1) * RAND() + 10), 0)
SET @rndFirstNameStr = ''
WHILE @x < 20
BEGIN
IF LEN(@rndFirstNameStr) = 0 SET @rndFirstNameStr = @rndFirstNameStr + CHAR(ROUND(((91 - 65 -1) * RAND() + 65), 0)) ELSE SET @rndFirstNameStr = @rndFirstNameStr + CHAR(ROUND(((122 - 97 -1) * RAND() + 97), 0))
SET @x = @x+1
END

SET @x = ROUND(((15 - 10 -1) * RAND() + 10), 0)
SET @rndAddressStr = CAST(ROUND(((9999 - 1 -1) * RAND() + 1), 0) AS VARCHAR) + ' '
WHILE @x < 26
BEGIN
IF LEN(@rndFirstNameStr) = 0 SET @rndAddressStr = @rndAddressStr + CHAR(ROUND(((91 - 65 -1) * RAND() + 65), 0)) ELSE SET @rndAddressStr = @rndAddressStr + CHAR(ROUND(((122 - 97 -1) * RAND() + 97), 0))
SET @x = @x+1
END
SET @rndAddressStr = @rndAddressStr + ' ' + (SELECT suffix FROM @streetSuffix WHERE ID = ROUND((((SELECT MAX(ID) FROM @streetSuffix) - 1 -1) * RAND() + 1), 0))

SET @x = ROUND(((15 - 10 -1) * RAND() + 10), 0)
SET @rndLastNameStr = ''
WHILE @x < 20
BEGIN
IF LEN(@rndLastNameStr) = 0 SET @rndLastNameStr = @rndLastNameStr + CHAR(ROUND(((91 - 65 -1) * RAND() + 65), 0)) ELSE SET @rndLastNameStr = @rndLastNameStr + CHAR(ROUND(((122 - 97 -1) * RAND() + 97), 0))
SET @x = @x+1
END
SET @rndInteger = ROUND(((3 - 1 -1) * RAND() + 1), 0) - 1
SET @rndDate = DATEADD(DAY, -ROUND(((35000 - 0 -1) * RAND() + 0), 0), GETDATE())

INSERT INTO @randomTable (firstName, lastName, address, age, birthdate, sex)
VALUES (@rndFirstNameStr, @rndLastNameStr, @rndAddressStr, DATEDIFF(YEAR,@rndDate,CURRENT_TIMESTAMP) + CASE WHEN DATEADD(YEAR,DATEDIFF(YEAR,@rndDate,CURRENT_TIMESTAMP),@rndDate) > CURRENT_TIMESTAMP THEN -1 ELSE 0 END, @rndDate, CASE WHEN @rndInteger = 0 THEN 'M' WHEN @rndInteger = 1 THEN 'F' END)
SET @i = @i + 1
END
SET NOCOUNT OFF

SELECT * FROM @randomTable





Don't forget to mark helpful posts, and answers. It helps others to find relevant posts to the same question.


No comments:

Post a Comment