微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 SQL 中将超过 1K 的记录插入到临时表中

如何解决无法在 SQL 中将超过 1K 的记录插入到临时表中

我是 sql 新手,请帮助我。

我正在尝试向 sql 临时表插入超过 1k 条记录,但出现此错误

INSERT 语句中的行值表达式的数量超过了 1000 个行值的最大允许数量

请帮助我如何解决将记录插入临时表的问题。我需要插入 5k 条记录,请帮助我

这是我的剧本

use DatabaseName
SET NOCOUNT ON
Create Table TemprefundDetails (PolicyNumber NVARCHAR(10))

INSERT INTO @TemprefundDetails (PolicyNumber) 
VALUES 
(1),(2),(3)
.
.
.
.
(999),(1000),(1001),(1002)
.
.

解决方法

使用单个 VALUES() 构造最多只能执行 1'000 次 - 如果需要更多,则需要重复 INSERT 语句:

INSERT INTO @TempRefundDetails (PolicyNumber) 
VALUES (1),.....,(1000);

INSERT INTO @TempRefundDetails (PolicyNumber) 
VALUES (1001),(2000);

INSERT INTO @TempRefundDetails (PolicyNumber) 
VALUES (2001),(3000);

等等

,

The documentation is explicit 关于此限制,并建议多种解决方法:

当用作 INSERT ... VALUES 语句的 VALUES 子句时,有 1000 行的限制。如果行数超过最大值,则返回错误 10738。要插入超过 1000 行,请使用以下方法之一:

  • 创建多个 INSERT 语句
  • 使用派生表
  • 使用 bcp 实用程序、.NET SqlBulkCopy 类、OPENROWSET (BULK ...) 或 BULK INSERT 语句批量导入数据
,

根据插入的实际值的来源,可能会改变插入部分的内容/方式。您是从单个连接插入还是打开和关闭连接以使用数据?这也会改变你的做法。

您正在使用表变量(名称前面的@ 表明了这一点)。请参阅下面的注释和代码,了解问题所在以及如何修复。

use DatabaseName 

SET NOCOUNT ON 

-- this is creating  permeant table not a temp table or table variable.
CREATE Table TempRefundDetails (PolicyNumber NVARCHAR(10))

-- this inserts into a table variable not temp table
INSERT INTO @TempRefundDetails (PolicyNumber)



-- this will create a temp table
IF OBJECT_ID('tempdb..#TempRefundDetails') IS NOT NULL 
    DROP TABLE #TempRefundDetails

CREATE TABLE #TempRefundDetails ( 
    PolicyNumber NVARCHAR(10)
)

INSERT INTO #TempRefundDetails (
    PolicyNumber
)
VALUES (),() -- and so on

OR select from another table source directly into the table

INSERT INTO #TempRefundDetails (
    PolicyNumber
)
Select PolicyNumber
From SomeTableNameHere
,

代码用途不明确,但可以使用WHILE LOOP插入记录

DECLARE @TempRefundDetails TABLE (PolicyNumber NVARCHAR(10))

DECLARE @cnt INT = 1;

WHILE @cnt < 5001 <-- your number here
BEGIN
   INSERT INTO @TempRefundDetails (PolicyNumber) VALUES (@cnt)
   SET @cnt = @cnt + 1
END

SELECT * FROM @TempRefundDetails

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。