あなたはこれを行うことができます:
WITH Temp
AS
(
SELECT n
FROM(VALUES(0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) AS Temp(n)
), nums
AS
(
SELECT id = t1.n * 10 + t2.n + 1
FROM temp AS T1
CROSS JOIN temp AS t2
)
INSERT INTO ProductSerialNumber(serialnumber)
SELECT 12345679000 + id AS Serialnumber -- You can insert into other columns too
FROM nums;
SQL フィドルのデモ。
注意:この構文FROM(VALUES(0), (1), ..., (9)) AS Temp(n)
は SQL Server-2008 の新しいものであり、SELECT ... UNION ALL SELECT ...
代わりに古いバージョンを使用できます。
ただし、可能であれば、このテーブルを変更してこの列を自動増分にすることができますSerialNumber
。IDENTITY(12345679000, 1)
更新 1
SQL Server 2005 の場合は、次を試してください。
WITH Temp
AS
(
SELECT 1 AS id
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
), nums
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY t1.id) AS id
FROM temp t1, temp t2, temp t3, temp t4
)
INSERT INTO ProductSerialNumber(serialnumber)
SELECT 12345679000 + id AS Serialnumber
FROM nums
WHERE id <= 100;
SQL Fiddle Demo を更新しました。
更新 2
*このクエリはどのように機能しますか? *
まず、値が 4 つだけの仮想テーブルを定義します。
SELECT 1 AS id
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 4
後で再利用するために、 Common table expression(CTE)内で定義しました。
次に、次の CTE で使用しました。
FROM temp t1, temp t2, temp t3, temp t4
temp
これにより、テーブル自体が4 回結合されるため、4 4 = 256行になります。次に、ランキング機能ROW_NUMBER()
を一巡して、1 から 265 までの一連の番号を生成しました。
最後に、前のステップで既に生成した数字のINSERT INTO ... SELECT ...
数字を選択し、それらをテーブルに挿入する構文です。<= 100
これが理にかなっていることを願っています。