最小値と最大値を持つ一連の数値をSQLServerで作成したいと思います。上限に達したら循環させたい。誰かが私を助けることができますか?
3579 次
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
上記の簡単な例と同等です:
- オブジェクト エクスプローラーで、Programmabilityフォルダーを展開します。
- Programmabilityフォルダーの下で、 以下に示すようにSequencesフォルダーを右クリックします。
- 下線は、上記の SQL ステートメントと同等のものを取得するために更新する値ですが、必要に応じてこれらを変更することを検討します (以下の注を参照)。
ノート:
- デフォルトの開始値、最小値、および最大値は、この場合は int であるデータ型の範囲によって決定されました。シーケンスと範囲の詳細については、こちらを参照してください。
- シーケンスを 1 から開始し、最小値も 1 にしたい場合があります。
于 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
于 2011-08-10T20:25:24.970 に答える
0
于 2009-12-02T18:27:42.023 に答える