0

私は2つのテーブルを持っています

Product (product_id, productName)
ProductSerialNumber (ProductSerialNumber_id, product_id, serialNumber, status)

製品のシリアル番号(数量: 90) を持っています12345679000:123456790100MILK

複数の挿入を使用せずにこれを行う方法はありますか

$Sn = 12345679000;
while ($Sn <= 123456790100 )
{
  INSERT INTO ProductSerialNumber VALUES(...,...,$Sn,...)
  $Sn++;

}
4

2 に答える 2

1

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

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 ...代わりに古いバージョンを使用できます。

ただし、可能であれば、このテーブルを変更してこの列を自動増分にすることができますSerialNumberIDENTITY(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

これが理にかなっていることを願っています。

于 2013-02-10T09:40:28.970 に答える
0

here プロシージャで複数の行を挿入する別の方法

CREATE PROCEDURE autoInsert
@SerialNumberStart bigint,
@SerialNumberEnd bigint,
@status int,
@productID int
AS   
while @SerialNumberStart <= @SerialNumberEnd
begin
BEGIN TRAN

INSERT INTO ProductSerialNumber VALUES(@SerialNumberStart)
--print @SerialNumberStart

COMMIT TRAN;
set @SerialNumberStart=@SerialNumberStart+ 1
end
于 2013-02-11T12:48:21.617 に答える