我刚刚读了 SQL Server 2008的最大容量规范 并最多看到8060 bytes 每行?什么...每行只有8kb? (是的,我看到了“行绕流存储”特殊处理,我说的是标准行为)

我在这里误会了什么吗?我确定我有,因为我敢肯定我看到了二进制对象,其中存储了SQL Server数据库中的几个MB尺寸。这是不祥的 每行 真的是指一个排行,就像一行中,多列吗?

所以当我有三个 nvarchar 那里的每个4000个字符的列(假设三个用文本框写的法律文档...) - 服务器吐出警告?

有帮助吗?

解决方案

是的,您将在Create Table上发出警告,插入或更新的错误

LOB类型(NVARCHAR(MAX),VARCHAR(MAX)和VARBINARY(MAX)允许2GB-1字节,这是您存储大量数据的方式,并且是您以前看到的。

  • 对于单个字段> 4000个字符/8000字节,我会使用nvarchar(max)

  • 对于3 x nvarchar(4000),我会考虑一个:

    • 我的设计错了
    • NVARCHAR(Max)的一个或多列
    • 1:1个“最小填充”列的子桌

其他提示

2008将处理溢出,而在2000年,它将拒绝插入溢出的记录。但是,考虑到这一点仍然最好设计,因为大量记录溢出可能会导致查询的某些性能问题。在您描述的情况下,我可能会考虑一个带有文档类型列的相关表,用于文档的大字段以及Intial表的外键。但是,如果与所有三列都在相同的记录或最大值中填写不同,那么设计可能就可以了。您必须知道数据才能确定哪个是最好的。另一个考虑因素是继续像现在一样继续前进,直到遇到问题,然后用单独的文档表替换。您甚至可以通过重命名现有表并创建新表格,然后使用现有的表格创建视图来进行重构,从而从新结构中获取数据。尽管您仍然需要调整任何插入或更新语句,但这可能会阻止您的代码中断。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top