5

首先,我知道一般来说拥有大量宽列是一个坏主意,但这是我被限制的格式。

我有一个应用程序将 CSV 文件导入临时表,然后再操作它们并在数据库中插入/更新值。临时表是动态创建的,并且具有可变数量的 NVARCHAR 列,文件被导入到其中,加上两个用作行 ID 的 INT 列。

我必须导入的一个特定文件大约有 450 列宽。使用大型 NVARCHAR 列中使用的 24 字节指针,根据我的计算,这加起来约为 10k,我得到了错误Cannot create a row of size 11166 which is greater than the allowable maximum row size of 8060.

有没有办法解决这个问题,或者我唯一的选择是修改导入器以拆分导入或从文件中删除列?

4

4 回答 4

3

您可以使用使用 16 字节指针的 text/ntext。而 varchar/nvarchar 使用 24 字节指针。

NVARCHAR(max) 或 NTEXT可以存储超过8kb的数据,但在SQL Server 2012之前记录大小不能超过8kb。如果数据不适合8kb 页面大小,则将较大列的数据移动到另一个页面,并使用24 字节(如果数据类型为 varchar/nvarchar)指针作为引用指针存储在主列中。如果它是 text/ntext 数据类型,则使用16 字节指针。

于 2013-12-31T07:11:30.357 回答
2

有关详细信息,您可以访问以下链接:

解决 SQL Server 最大列限制 1024 和 8kb 记录大小

或者

http://msdn.microsoft.com/en-us/library/ms186939(v=sql.90).aspx

于 2014-01-11T12:42:52.130 回答
1

如果您使用 SQL Server 2005、2008 或 2012,您应该能够使用大于 8,000 个字符的 NVARCHAR(max) 或 NTEXT。MAX 会给你 2^31 - 1 个字符:

http://msdn.microsoft.com/en-us/library/ms186939(v=sql.90).aspx

于 2013-05-08T15:05:11.337 回答
0

我同意 Varchar 或 nvarchar (Max) 是一个很好的解决方案,并且可能对您有用,但完整性我建议您也可以创建多个表,这两个表具有一对一的关系。

于 2014-01-11T14:30:15.697 回答