5

最小値と最大値を持つ一連の数値をSQLServerで作成したいと思います。上限に達したら循環させたい。誰かが私を助けることができますか?

4

4 に答える 4

2

whileループは必要ありません。まず、TallyまたはNumbersテーブルが必要です。

Create Table dbo.Numbers ( Value int not null Primary Key Clustered )
GO
With Nums As
    (
    Select Row_Number() Over( Order By S1.object_id ) As Num
    From sys.columns as s1
        cross join sys.columns as s2
    )
Insert dbo.Numbers( Value )
Select Num
From Nums
Where Num <= 100000

私は自分のテーブルに100Kの数字しか入れていませんが、もっと必要かもしれません。このテーブルにデータを入力する必要があるのは1回だけです。これで、任意のシーケンスを作成できます。そのようです:

Select Value
From dbo.Numbers
Where Value Between @Start And @End

増分値が必要ですか?:

Select Value
From dbo.Numbers
Where Value % @Increment = 0
于 2010-02-25T05:51:34.170 に答える
1

SQL Server 2012 の時点で、シーケンスが追加され、おそらく IDENTITY よりも高速です。

質問リクエストとしてオプションを使用する簡単な例ですが、合成主キーに使用するため、CYCLEほとんどの人はおそらく使用しません。CYCLE

CREATE SEQUENCE Schema.SequenceName
AS int
INCREMENT BY 1 
CYCLE;

MSDN から取得した SQL 構文は次のとおりです。

CREATE SEQUENCE [schema_name . ] sequence_name  
    [ AS [ built_in_integer_type | user-defined_integer_type ] ]  
    [ START WITH <constant> ]  
    [ INCREMENT BY <constant> ]  
    [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]  
    [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]  
    [ CYCLE | { NO CYCLE } ]  
    [ { CACHE [ <constant> ] } | { NO CACHE } ]  
    [ ; ]  

GUIで行う方法は次のとおりです。ほとんどの人はそれを使用しないため、これはオプションがチェックされていないCYCLE上記の簡単な例と同等です:

  1. オブジェクト エクスプローラーで、Programmabilityフォルダーを展開します。
  2. Programmabilityフォルダーの下で、 以下に示すようにSequencesフォルダーを右クリックします。

ここに画像の説明を入力

  1. 下線は、上記の SQL ステートメントと同等のものを取得するために更新する値ですが、必要に応じてこれらを変更することを検討します (以下の注を参照)。

ここに画像の説明を入力

ノート:

于 2016-09-29T15:36:53.420 に答える
1

SQL 2000 で動作するコードを次に示します。

DECLARE @NumRows int;
SET @NumRows = 10000;
DECLARE @t table (RowNum int not null primary key);

-- Seed
INSERT @t VALUES(1)

WHILE @@ROWCOUNT > 0
BEGIN
    INSERT @t
     SELECT     t.RowNum + x.MaxRowNum FROM @t t
     CROSS JOIN 
     (SELECT    MAX(RowNum) MaxRowNum FROM @t) x
     WHERE      t.RowNum <= @NumRows - x.MaxRowNum
END

これから適応: Dr. Tom's Workshop: Generating Sequence Numbers

于 2011-08-10T20:25:24.970 に答える