我刚刚读过Maximum Capacity Specification for SQL Server 2008并且每行最多看到8060字节 ?什么...每行只允许8KB? (是的,我看到“行溢出存储”特殊处理,我在谈论标准行为)
我在这里误解了什么吗?我确信我有,因为我确定我看到SQL Server数据库中存储了几个MB大小的二进制对象。这个不祥的每行是否真的意味着一行,一行,多列?
所以当我有三个nvarchar
列,其中每个4000个字符(假设有三个法律文件写在文本框中......) - 服务器会发出警告?
答案 0 :(得分:3)
是的,您将收到有关CREATE TABLE的警告,INSERT或UPDATE
上的错误LOB类型(nvarchar(max),varchar(max)和varbinary(max)允许2Gb-1字节,这是你存储大块数据的方式,也是你以前见过的。
对于单个字段> 4000字符/ 8000字节我使用nvarchar(max)
对于一行中的3 x nvarchar(4000),我会考虑其中一个:
答案 1 :(得分:1)
2008将处理溢出,而在2000年,它只会拒绝插入溢出的记录。但是,最好还是考虑到这一点,因为大量的记录溢出可能会导致查询时出现性能问题。在您描述的情况下,我可能会考虑一个相关的表,其中包含用于文档类型的列,用于文档的大字段以及用于初始表的外键。但是,如果所有三列都填充在同一记录或最大值中,那么设计可能没问题。您必须知道您的数据以确定哪个是最佳的。另一个考虑因素是现在继续,直到遇到问题,然后用单独的文档表替换。您甚至可以通过重命名现有表并创建新表,然后使用从新结构中提取数据的现有表名创建视图来进行重构。这可能会使你的代码很多破坏,尽管你仍然需要调整任何插入或更新语句。