SQL 截断然后批量插入 - 超出最大行大小 - 为什么?
SQL Truncate then Bulk Insert- Exceeding Max Row Size- Why?
我有一个导出(在我需要删除的几个数字字段中有一个逗号),过去几天我一直在 table 中导出到我的 SQL 服务器.我所做的只是 Truncate
table 并替换为导出中的任何内容。就在今天,我收到了这个错误:
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
进入 table 时,它都会以某种方式占用我 table 中的一些 space不知情。导出只有大约 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
Max rowsize指的是行的宽度,而不是行数。每行只允许有这么多字节 - 8060 - 宽。如果您定义了一行,并且它的所有字段都大于 8060,则无法创建该行。这是一个警告而不是错误,因为像 VARCHAR 这样的数据类型是可变宽度的。假设可变宽度字段中的每个字节都没有分配给一个值,你可能没问题。
我有一个导出(在我需要删除的几个数字字段中有一个逗号),过去几天我一直在 table 中导出到我的 SQL 服务器.我所做的只是 Truncate
table 并替换为导出中的任何内容。就在今天,我收到了这个错误:
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
进入 table 时,它都会以某种方式占用我 table 中的一些 space不知情。导出只有大约 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
Max rowsize指的是行的宽度,而不是行数。每行只允许有这么多字节 - 8060 - 宽。如果您定义了一行,并且它的所有字段都大于 8060,则无法创建该行。这是一个警告而不是错误,因为像 VARCHAR 这样的数据类型是可变宽度的。假设可变宽度字段中的每个字节都没有分配给一个值,你可能没问题。