Получить случайное значение из диапазона в MS SQL? - PullRequest
1 голос
/ 11 мая 2011

Предположим, моя таблица может иметь значения от 000 до 999 (три цифры и меньше 1000)

Некоторые из этих значений заполнены.Давайте предположим, что в настоящее время моя таблица имеет

000,002,005,190 (в таблицу можно вставить 001,004,003,006, .. 189,191, .., 999)

, и эти значения случайным образом распределены 000002 находится в таблице, но 001 еще не в таблице.

Как получить значения, которые я могу вставить в таблицу.

Ответы [ 3 ]

2 голосов
/ 11 мая 2011
DECLARE @t TABLE(id INT)
INSERT INTO @t (id) 
VALUES 
(1),(19),(3)

;WITH numbers AS (
SELECT ROW_NUMBER() OVER(ORDER BY o.object_id,o2.object_id) RN FROM sys.objects o
CROSS JOIN sys.objects o2
),  NotExisted AS(
SELECT * FROM numbers WHERE RN NOT IN (SELECT ID FROM @t)
AND RN<1000)
SELECT TOP 1 RN FROM NotExisted ORDER BY NEWID()
2 голосов
/ 11 мая 2011
DECLARE @t TABLE
(VALUE CHAR(3))

INSERT @t
VALUES
('000'),('002'),('005'),('190')


;WITH rnCTE
AS
(
    SELECT -1 + ROW_NUMBER() OVER (ORDER BY TYPE, number, name) AS rn
    FROM master.dbo.spt_values
)
SELECT RIGHT('000' + CAST( rn AS VARCHAR(11)),3)
FROM rnCTE
WHERE NOT EXISTS    (   SELECT 1 FROM @t 
                        WHERE VALUE = rn
                    )
AND rn < 1000

РЕДАКТИРОВАТЬ

Этот запрос работает путем генерации полного списка возможных чисел из системной таблицы (master.dbo.spt_values), которая гарантированно содержит более 1000 строк внутриCTE rnCTE.-1 добавляется к ROW_NUMBER, чтобы значения начинались с 0, а не с 1.

Внешний нулевой запрос дополняет отображаемые числа, возвращая только те, которых нет в исходных данных и которые меньше 1000.

0 голосов
/ 11 мая 2011

Вам нужно будет написать T-SQL для первого запроса и найти пробелы.Не существует готового SQL-кода, который мог бы дать вам пробелы напрямую.

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