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
CHỈNH SỬA
Truy vấn này hoạt động bằng cách tạo danh sách đầy đủ các số có thể có từ bảng hệ thống (master.dbo.spt_values
) được đảm bảo chứa hơn 1000 hàng bên trong CTE rnCTE
. -1 được thêm vào ROW_NUMBER
để có các giá trị bắt đầu từ 0 thay vì 1.
Số không truy vấn bên ngoài đệm các số để hiển thị, chỉ trả về những số không có trong dữ liệu nguồn và nhỏ hơn 1000.