首页 > 解决方案 > 使用表值构造函数作为派生表插入超过 1000 行

问题描述

我有以下 T-SQL 查询,它将值列表插入到临时表中。我的问题是 INSERT 函数限制为 1,000 行,而我有一个包含 4,000 行的列表。

这是查询的摘录:

USE MyDatabase

create table #t1 
( 

ResaID numeric (20) NOT NULL,
CtyRes varchar (20) NOT NULL

); 

INSERT INTO #t1 VALUES

('304475','GB'),
('304482','GB'),
('304857','GB'),
('314643','GB'),
('321711','GB'),
('321714','GB'),
...

...列表一直持续到第 4,000 行

根据 Microsoft 文档,可以使用表值构造函数作为派生表来绕过此限制。

来自 Microsoft 的示例:插入超过 1,000 行

CREATE TABLE dbo.Test ([Value] int);  

INSERT INTO dbo.Test ([Value])  
  SELECT drvd.[NewVal]
  FROM   (VALUES (0), (1), (2), (3), ..., (5000)) drvd([NewVal]);

如何修改现有的 SQL 查询以使其适应此示例?

标签: sqlsql-servertsqlderived-table

解决方案


您可以使用以下方法扩展 MS 示例以处理多列:

INSERT INTO #t1(ResaID, CtyRes) 
SELECT ResaId, CtyRes
FROM (VALUES 
('304475','GB'),
('304482','GB'),
('304857','GB'),
('314643','GB')) AS sub( ResaId, CtyRes);

db<>小提琴演示


推荐阅读