SQL截断然后批量插入 - 超过最大行大小 - 为什么?

时间:2015-12-10 21:07:00

标签: sql-server bulkinsert truncate

我有一个导出(在我需要删除的几个字段中使用逗号),过去几天我一直在表格中导出到我的SQL Server。我所做的只是Truncate表,并替换为导出中的任何内容。就在今天,我收到了这个错误:

Warning: The table "myTable" has been created, but its maximum row size exceeds the allowed maximum of 8060 bytes. INSERT or UPDATE to this table will fail if the resulting row exceeds the size limit.

我能想到的唯一事情就是每当我Bulk Insert进入表格时,它就会占据我不知道的表格中的某些空间。导出只有大约150行数据,所以我真的不知道发生了什么。有谁知道吗?

这是我的代码:

TRUNCATE TABLE [myTable]


ALTER TABLE [myTable]
ALTER COLUMN [Numbercolumn1] NVARCHAR(50)

ALTER TABLE [myTable]
ALTER COLUMN [Numbercolumn2] NVARCHAR(50)


BULK INSERT [SALES server].DBO.[myTable]
FROM 'C:\exports\myTable_EXPORT.TXT'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '|',
ROWTERMINATOR = '0X0A'
)

UPDATE [myTable]
SET [Numbercolumn1] = REPLACE([Numbercolumn1],',',''),
[Numbercolumn2] = REPLACE([Numbercolumn2],',','')


ALTER TABLE [myTable]
ALTER COLUMN [Numbercolumn1] FLOAT

ALTER TABLE [myTable]
ALTER COLUMN [Numbercolumn2] FLOAT

1 个答案:

答案 0 :(得分:1)

Max rowsize指的是行的宽度,而不是行数。每行只允许这么多字节--8060 - 宽。如果您已定义一行,并且其所有字段都大于8060,则无法创建该行。这是一个警告而不是错误,因为像VARCHAR这样的数据类型是可变宽度。假设可变宽度字段中的每个字节都没有分配给一个值,那么你可能会没问题。