再帰CTEを使用すると、次のように欠落しているIDを特定できます。
DECLARE @Table TABLE(
ID INT,
Name VARCHAR(10)
)
INSERT INTO @Table VALUES (1, 'John'),(2, 'Sam'),(3,'Peter'),(6, 'Mike')
DECLARE @StartID INT,
@EndID INT
SELECT @StartID = MIN(ID),
@EndID = MAX(ID)
FROM @Table
;WITH IDS AS (
SELECT @StartID IDEntry
UNION ALL
SELECT IDEntry + 1
FROM IDS
WHERE IDEntry + 1 <= @EndID
)
SELECT IDS.IDEntry [ID]
FROM IDS LEFT JOIN
@Table t ON IDS.IDEntry = t.ID
WHERE t.ID IS NULL
OPTION (MAXRECURSION 0)
このオプションMAXRECURSION 0
を使用すると、コードでSQLSERVERの再帰制限を回避できます。
クエリヒントおよびWITHcommon_table_expression(Transact-SQL)から
MAXRECURSIONnumberこのクエリで許可される再帰の最大数を指定します。numberは、0から32767までの非負の整数です。0が指定されている場合、制限は適用されません。このオプションが指定されていない場合、サーバーのデフォルトの制限は100です。
クエリの実行中にMAXRECURSION制限の指定された数またはデフォルトの数に達すると、クエリは終了し、エラーが返されます。
このエラーのため、ステートメントのすべての効果がロールバックされます。ステートメントがSELECTステートメントの場合、部分的な結果が返されるか、結果が返されない場合があります。返される部分的な結果には、指定された最大再帰レベルを超える再帰レベルのすべての行が含まれない場合があります。
RANDOM名の生成は、そのような名前の要件、およびそのような名前の列タイプの影響を大きく受けます。このランダムな名前は正確には何を意味しますか?