簡體   English   中英

批量插入同一行多次(N)次

[英]Bulk Insert the same row multiple (N) times

有沒有辦法根據變量 N 將同一行 BULK 插入到表中?

基本上:

INSERT INTO Table (FK_id, Somedate)
VALUES (3, GETDATE())
OVER 5000 ROWS

我知道我可以聲明 @InsertedRows 之類的變量並在 while 循環中遞增它:

DECLARE @InsertedRows = 0;
WHILE (@InsertedRows < N)
  INSERT INTO Table (FK_id, Somedate)
  VALUES (3, GETDATE())

  @InsertedRows++
END WHILE

但這是多個插入語句,而不是我更喜歡的 1 個插入調用。 有沒有辦法做到這一點?

我發現遞歸 CTE 很容易從 memory 完成,並且性能也很好。

DECLARE @limit int = 5000;

;WITH x AS 
(
    SELECT n = 1 UNION ALL 
    SELECT n + 1 FROM x WHERE n < @limit
)
INSERT dbo.tablename(FK_id, Somedate) 
SELECT 3, GETDATE() FROM x
OPTION (MAXRECURSION 0);

SSMS 中真正簡單的方法是這樣做:

INSERT INTO Table (FK_id, Somedate)
VALUES (3, GETDATE())
GO 5000

但它仍然是這樣的多個插入。

您可以像這樣執行單個插入:

WITH
    L0 AS (SELECT 1 AS c UNION ALL SELECT 1),
    L1 AS (SELECT 1 AS c FROM L0 A CROSS JOIN L0 B),
    L2 AS (SELECT 1 AS c FROM L1 A CROSS JOIN L1 B),
    L3 AS (SELECT 1 AS c FROM L2 A CROSS JOIN L2 B),
    L4 AS (SELECT 1 AS c FROM L3 A CROSS JOIN L3 B),
    L5 AS (SELECT 1 AS c FROM L4 A CROSS JOIN L4 B),
    Nums AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS n FROM L5)
INSERT INTO Table(FK_id, Somedate)
SELECT TOP (5000) 
FK_id, Somedate
FROM Nums 
CROSS APPLY (VALUES (3,  GETDATE())) t (FK_id, Somedate)
ORDER BY n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM