我有一个名为ABC的表。在此表中,我有一个定义为XYZ
varchar(8000).
在本专栏中,我存储了SOAP错误请求。
我的问题是,现在我得到的SOAP错误请求的长度超过
8000 (to be accurate it is now 16000).
我已经读过varchar
的最大长度为8000,所以我的问题是如何将列XYZ的长度增加到16000?
答案 0 :(得分:18)
如果您确实需要超过8000个字符,则需要使用VARCHAR(MAX)
,它可以存储最多2 GB的文字:
XYZ varchar(max)
这为你提供了多达20亿个字符 - 这是Leo Tolstoj的战争与和平大约200倍 - 对于大多数情况应该足够了!
注意:如果您收到SOAP请求,那很可能是格式正确的XML - 对吧?在这种情况下,您还可以使用SQL Server 2005 的XML
数据类型和更新版本。它还可以存储多达2 GB的数据,但它比普通varchar(max)
更有效地存储它 - 你可以对它运行XPath / XQuery来从中获取数据。
所以我建议你使用:
XYZ XML
答案 1 :(得分:4)
使用varchar(max)
varchar(n)
是可变长度的非Unicode字符串数据。 n
定义字符串长度,可以是1到8,000之间的值。 max表示最大存储大小为2 ^ 31-1个字节(2 GB)。
存储大小是输入数据的实际长度+ 2个字节。
答案 2 :(得分:0)
尝试使用处理长文本的数据类型开始。我想到了“文字”。
答案 3 :(得分:0)
答案 4 :(得分:0)
--Check this example...
create table t1( i varchar(max))
create table t2( i varchar(8000))
DECLARE @String1 VARCHAR(MAX)
set @String1 = 'Hello'
declare @i int
set @i = 1
while ( @i < 50000)
begin
set @String1 = @String1 + 'world'
set @i = @i +1
end
select len(@String1)
insert into t1 select @String1 -- will succeed
insert into t2 select @String1 -- will fail
SELECT LEN(i) from t1
SELECT LEN(i) from t2