sql >> Databasteknik >  >> RDS >> Sqlserver

Få ett slumpmässigt värde från ett intervall i 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

REDIGERA

Den här frågan fungerar genom att generera den fullständiga listan över möjliga nummer från en systemtabell (master.dbo.spt_values ) som garanterat innehåller mer än 1000 rader inuti CTE rnCTE . -1 läggs till i ROW_NUMBER att få värdena att börja på 0 istället för 1.

Den yttre frågan noll fyller ut siffrorna för visning och returnerar endast de som inte finns i källdata och är mindre än 1000.



  1. Summa resultaten av några frågor och hitta topp 5 i SQL

  2. Hur får man kolumnnamn och typer från en PostgreSQL-fråga (utan att köra den)?

  3. Det går inte att infoga explicit värde för identitetskolumnen i tabellen "tabell" när IDENTITY_INSERT är inställt på AV

  4. Innodb:Kan inte hitta FULLTEXT-index som matchar kolumnlistan vid efterfrågan på mer än 1 kolumn