Как я могу генерировать случайные строки в TSQL - PullRequest
2 голосов
/ 30 декабря 2010

Как мне сгенерировать случайную строку? Я написал следующее, в результате чего я получил только одно письмо!

declare @alphaCount int
set @alphaCount =  @alphaCount +1
CHAR(@alphaCount)

Заранее спасибо!

Ответы [ 4 ]

6 голосов
/ 30 декабря 2010

Это даст вам 10000 строк в указанном формате.

DECLARE @Numbers  TABLE
(
n INT PRIMARY KEY
);


WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),   --2
        E02(N) AS (SELECT 1 FROM E00 a, E00 b), --4
        E04(N) AS (SELECT 1 FROM E02 a, E02 b), --16
        E08(N) AS (SELECT 1 FROM E04 a, E04 b), --256
        E16(N) AS (SELECT 1 FROM E08 a, E08 b)  --65,536
INSERT INTO @Numbers
SELECT TOP 10000 ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM E16        

SELECT CAST((SELECT TOP 20 CHAR(CASE
                                  WHEN Abs(Checksum(Newid()))%2 = 0 THEN 65
                                  ELSE 97
                                END + Abs(Checksum(Newid()))%26)
             FROM   @Numbers n1
             WHERE  n1.n >= -n2.n /*So it gets re-evaluated for each row!*/
             FOR XML PATH('')) AS CHAR(20))
FROM   @Numbers n2  
1 голос
/ 30 декабря 2010

Эта процедура будет работать.Возможно, вам придется создать функцию с ним, но у нее есть правильные идеи.

1 голос
/ 30 декабря 2010

Заполните временную таблицу списком случайных слов.Затем используйте CROSS JOIN для объединения каждого слова с каждым другим словом, чтобы получить целую тонну данных без особых усилий.

select l.word+' '+r.word from #Words as l
cross join #Words as r
0 голосов
/ 30 декабря 2010

Это должно сработать, как

DECLARE @length         Integer
DECLARE @return         VarChar(1000)
DECLARE @index          Integer
DECLARE @value          Integer

SET @length = 12
SET @return = '';

IF @length > 1000
    SET @length = 1000;

IF @length <= 0
    SELECT @return;

SET @index = 0;

WHILE @index < @length
BEGIN
    SET @value = (64 * RAND()) + 32;
    SET @return = @return + CHAR(@value);

    SET @index = @index + 1;
END 

SELECT @return;

Если вы хотите сделать эту функцию определенной пользователем, мне понравилась опция 'steve' в этой статье. здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...