无法在SQL中向临时表插入超过1K条记录

无法在SQL中向临时表插入超过1K条记录,sql,sql-server-2012,Sql,Sql Server 2012,我是SQL新手,请帮助我 我正在尝试向SQL temp表插入超过1k条记录,我遇到以下错误: INSERT语句中的行值表达式数超过了允许的最大1000行值数 请帮助我如何解决将记录插入临时表的问题。我需要插入5k记录,请帮助我 这是我的剧本 use DatabaseName SET NOCOUNT ON Create Table TempRefundDetails (PolicyNumber NVARCHAR(10)) INSERT INTO @TempRefundDetails (Polic

我是SQL新手,请帮助我

我正在尝试向SQL temp表插入超过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()
构造,最多只能执行1000次-如果需要更多,则需要重复
INSERT
语句:

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

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

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

依此类推

根据插入的实际值来自何处,可能会更改插入零件的操作方式。您是从单个连接执行插入操作,还是打开和关闭连接以使用数据?这也会改变你做这件事的方式

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

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
关于此限制,并建议多种解决方法:

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

  • 创建多个INSERT语句
  • 使用派生表
  • 通过使用bcp实用程序、.NET SqlBulkCopy类、OPENROWSET(Bulk…)或Bulk INSERT语句大容量导入数据

代码的用途不清楚,但可以使用WHILE循环插入记录

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
DECLARE@tempruentdetails表(保单编号NVARCHAR(10))
声明@cnt INT=1;

当@cnt<5001时,这些1K值来自何处?为什么不使用BCP或批量插入导入数据?使用脚本插入几十行以上的数据是非常罕见的。bulk命令也可以减少日志记录,从而获得比简单插入更好的性能。您是否尝试通过创建脚本(转储)而不是备份来复制数据库?这只在没有(免费)真正备份的数据库产品中需要。在这里,文档或使用BCP/BULK INSERT从文件加载数据,而不是编写脚本。虽然我想知道那1K排是从哪里来的?这是使用转储而不是真正备份的另一次尝试吗?如果您可以使用SSIS包。这里的基本知识:感谢您的回复,我仍然收到相同的错误消息-Msg 10738,15级,状态1,第1017行INSERT语句中的行值表达式数超过了允许的最大1000行值数。问题是上面发布的@aaron之类的值语句太多:因此可能需要his和his的组合才能使用临时表vs表变量(表变量不适合大数据集)因此,根据您在VALUE语句中获取值的内容/方式,您可能会更改代码,但需要知道从何处获取值/如何获取值,以提供更好的答案。我猜上面的数据不是实际的数据,因为如果你只是想要1-5000这个数字,有更好的方法。