-1

特定のシリーズの列に値を入れたい

10100
10200
10300
.
.
.
.
11000
11100
11200
.
.

これを行う方法 ?whileループが使われると思います

insert into mytable(col_name)
select <>
4

2 に答える 2

3

あなたはこれを行うことができます:

WITH Temp
AS
(
  SELECT digit
  FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) AS temp(digit)
), Nums
AS
(
  SELECT t3.digit * 100 + t2.digit * 10 + t1.digit + 1  AS id
  FROM         TEMP AS t1
  CROSS JOIN TEMP AS t2
  CROSS JOIN TEMP AS t3
)
SELECT 
  n = 10100 + (id - 1) * 100
from nums
ORDER BY n;

SQL フィドルのデモ


これはどのように機能しますか?

このクエリは、探しているシーケンスの 1000 行を提供します。これは、算術進行と呼ばれます。シーケンスでは、シーケンスの n 番目の項は で与えられA + (n - 1) * dます。あなたのシーケンスでは:a = 10100最初の数字、d = 100シードである開始番号。

  • 最初に、10 個の数値を生成するアンカー クエリを使用しました (この構文は SQL Server 2008 の新機能であることに注意してください)。

  • 次に、それをそれ自体で3回交差結合して、10 3行= 1000行を与えました。これらを使用して、ルールに基づいてこのシーケンスの1000個の数値を生成しましたA + (n - 1) * d

次に、それらを新しいテーブルに挿入できます。INSERT INTO SELECT単に の代わりに を実行しSELECTます。


注意:このすべてのものの代わりに列を使用する必要がある場合がありますIDENTITY。これを使用すると、開始値とシード値を定義できます。その後、自動的にインクリメントされます。次の記事を参照してください。

于 2013-03-18T06:16:17.423 に答える
2

これを試してください:

DECLARE @table as TABLE(NUM bigint)
declare @var bigint
set @var=10100
while @var<11200
begin
    insert into @table values (@var)
    set @var=@var+100
end

select * from @table
于 2013-03-18T06:12:06.893 に答える