数月过去了,市场用大量的无聊拷贝填满了整个数据库。但是这还不是Steve真正关心的问题。数据库愉快地嗡嗡作响地运转着,每个人对项目的结果都很满意。
“没有问题,” ,我打开SQL Server 查询分析器工具,执行了如下的T-SQL批处理:
UPDATE MarketingDocuments
SET Document =
REPLACE(Document,
Its MegaWares Way or the Highway!,
MegaWare: Its really cool!)
当他看到出现的错误消息的时候,star的轻松的微笑很快消失了,“替换函数的参数1,text数据类型无效。”
SQL Server的开发人员很幸运,他们将会拨开乌云见蓝天。SQL Server 2005引入了一系列新的被称为MAX的数据类型。这是VARCHAR,NVARCHAR和VARBINARY类型的扩展,这几种类型以前被限制在8000字节以下。MAX可以容纳高达2GB的数据,与TEXT和IMAGE一样——并且完全兼容所有的SQL Server内置的字符串函数。
INSERT BigStrings (BigString)
VALUES (REPLICATE(1, 8000))
But the following row will result in an overflow:
INSERT BigStrings (BigString)
VALUES (REPLICATE(CONVERT(VARCHAR(MAX), 1), 100000))
你可以更改MAX数据类型在每个表的基础上的默认的行为,它们会表现得和TEXT和IMAGE类型一样。这是通过使用sp_tableoption 存储过程中的“大数值类型在行外”选项实现的。为了修改大字符串表以将MAX类型的处理方式变得与TEXT和IMAGE数据类型的处理方式相同,可以使用如下的T-SQL:
EXEC sp_tableoption
BigStrings,
large value types out of row,
1
看看定义一个MAX数据类型有多容易,与他们提供的灵活性一样,一些数据设计师将会被引诱以下列的方式开始定义表:
CREATE TABLE Addresses
(
Name VARCHAR(MAX),
AddressLine1 VARCHAR(MAX),
AddressLine2 VARCHAR(MAX),
City VARCHAR(MAX),
State VARCHAR(MAX),
PostalCode VARCHAR(MAX)
)
设计师要注意了:不要这样做!一个企业中的数据模型既应该包含有具有实际限制的数据,还要给用户接口设计师有关字段尺寸的大致的指导。像这样的表又该创建什么样的用户接口呢?
除了数据整合和用户接口含义之外,如果设计师这样不必要地使用这些类型还会带来性能上的损害。记住,查询优化器使用字段的尺寸作为判断优化查询计划的众多标准之一。对于这个表,优化器几乎没有任何选择。