如何在SQL Server 2005的列中存储超过8000个字符?

时间:2013-01-08 05:57:32

标签: sql sql-server sql-server-2005

我有一个名为ABC的表。在此表中,我有一个定义为XYZ

的列
varchar(8000).

在本专栏中,我存储了SOAP错误请求。

我的问题是,现在我得到的SOAP错误请求的长度超过

8000 (to be accurate it is now 16000). 

我已经读过varchar的最大长度为8000,所以我的问题是如何将列XYZ的长度增加到16000?

5 个答案:

答案 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