Это сложно. С
SELECT COUNT(*),MAX(CAST(REPLACE(y.name,'SID','') AS INT)) AS col_max FROM
sys.objects x INNER JOIN sys.columns y ON x.object_id=y.object_id
WHERE x.name='<TABLE_NAME>'
вы должны знать, сколько столбцов пропущено (т. Е. COUNT(*)
равно 5, а col_max
равно 107)
Если у вас есть таблица, которая содержит только один столбец со всеми возможными идентификаторами от 1 до макс. (Т. Е. 100,101,102,103,104, ..., 132), тогда вы можете сделать
SELECT * FROM (
SELECT CAST(REPLACE(y.name,'SID','') AS INT) AS col_id FROM
sys.objects x INNER JOIN sys.columns y ON x.object_id=y.object_id
WHERE x.name='<TABLE_NAME>'
) a
RIGHT JOIN <TABLE_IDS> b ON a.col_id=b.id
WHERE a.col_id IS NULL AND b.id<=(
SELECT MAX(CAST(REPLACE(y.name,'SID','') AS INT)) AS col_max FROM
sys.objects x INNER JOIN sys.columns y ON x.object_id=y.object_id
WHERE x.name='<TABLE_NAME>'
)
РЕДАКТИРОВАТЬ : извините, я только что видел, что эти значения не имена столбцов, а значения. Мое решение найдет отсутствующие имена столбцов