Как я могу генерировать случайные строки в TSQL

#tsql

Вопрос:

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

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

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

Комментарии:

1. SQL-это специфичный для домена язык запросов, а не полноценный язык программирования. создайте случайную строку на клиенте, а не на стороне БД.

2. Я хочу заполнить свою базу данных данными!!

3. Какой тип случайной строки вам нужен? (длина и допустимые символы)

4. длина 20, допустимые символы A-Z a-z

Ответ №1:

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

 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()))&)
             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  
 

Ответ №2:

Заполните временную таблицу списком случайных слов. Затем используйте ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ, чтобы объединить каждое слово с каждым другим словом, чтобы получить целую тонну данных без особых усилий.

 select l.word ' ' r.word from #Words as l
cross join #Words as r
 

Комментарии:

1. Как я могу сгенерировать список случайных слов?

2. @Shaza, просто придумай что-нибудь! Перекрестное соединение сгенерирует квадрат количества входных данных, которые вы ему дадите. Если вы скормите ему 20 слов, он сгенерирует 400 комбинаций. Если вы скормите ему 1000 слов, он сгенерирует 1000000.

Ответ №3:

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

Ответ №4:

Это должно помочь понять, как

 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;
 

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