Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Получаване на произволна стойност от диапазон в MS SQL?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранена процедура - връщане на идентичност като изходен параметър или скалар

  2. DEGREES() Примери в SQL Server

  3. Как да използвам таблична променлива в динамичен sql израз?

  4. Преобразувайте стойностите на колона INT в празен низ, като използвате ISNULL

  5. Използване на съхранени процедури на SQL Server от Python (pyodbc)