[英]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.