0

SQLクエリを取得しましたが、テーブルにデータを保存しています。番号で始まります。このスクリプトを実行する方法はありますか。1番から始まりません。


欠落
1
2
3
4
5

そして、これは私が欲しいものです


欠落
12
13
14
15
16

SELECT IDENTITY(INT,@parameter, 1) Missing
      INTO dbo.tally
      FROM master.sys.all_columns c
      CROSS JOIN master.sys.all_columns c1
4

1 に答える 1

2

数値を生成したいだけの場合。あなたはこれを行うことができます:

WITH Nbrs ( n ) AS (
        SELECT 12 UNION ALL
        SELECT 1 + n FROM Nbrs WHERE n < 16 )
SELECT 
   n AS MISSING 
FROM 
   Nbrs

アップデート

集計表を作成する方法はいくつかあります。最も一般的なケースは、ループを使用して数値を生成することです

この例は、再帰 CTE を使用して生成される集計テーブルを示しています。最初の部分:

SELECT 12 UNION ALL

集計表を開始するかどうかを定義します。2 番目の部分:

SELECT 1 + n FROM Nbrs WHERE n < 16 )

定義は集計表を終了することでした。を削除すると、WHERE n < 16数値が永久に生成され続けます。または、maxrecursive エラーが発生します。2 番目の部分では、 で数値をどれだけ増やしたいかを定義しますSELECT 1 + n。に変更する場合は、SELECT 2 + n. 出力は次のようになります。

MISSING
12
14
16

ここで、集計テーブルを増やしてSELECT 1 + n16 で停止するためです。出力は次のようになります。

MISSING
12
13
14
15
16

更新 2

それ以上の数が必要な場合は、300k. 次に、次のように設定できます。

OPTION ( MAXRECURSION 0 )

クエリのボタンで。たとえば、次のようになります。

WITH Nbrs ( n ) AS (
        SELECT 12 UNION ALL
        SELECT 1 + n FROM Nbrs WHERE n < 1000000000 )
SELECT 
   n AS MISSING 
FROM 
   Nbrs
OPTION ( MAXRECURSION 0 )

300k 以上を生成します。このエラーが導入されたため、終了しない再帰的な ctes を使用できないと思います。

参考文献:

于 2013-10-21T06:22:32.677 に答える