You can't magic values up out of no-where. Whatever you select FROM must contain the value you want. Using the system table master..spt_value
you can generate a long list of values, and check for numbers that are in there, but not in your table...
;With Numbers as (
select ROW_NUMBER() OVER (ORDER BY number) as n
from master..spt_values
)
SELECT
*
FROM
Numbers
LEFT JOIN
yourTable
ON Numbers.n = yourTable.ItemId
WHERE
Numbers.n IN (1,2,...,100)
AND yourTable.ItemID IS NULL
Or...
;With Numbers as (
select ROW_NUMBER() OVER (ORDER BY number) as n
from master..spt_values
)
SELECT
*
FROM
Numbers
WHERE
Numbers.n IN (1,2,...,100)
AND NOT EXISTS (SELECT * FROM yourTable WHERE ItemID = Numbers.n)
There are hundreds of ways of creating that initial list of numbers. But create it you must. Until you have the list of numbers than can exist, you can't select the numbers that don't currently exist.