7

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

varchar(8000).

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

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

8000 (to be accurate it is now 16000). 

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

4

5 回答 5

22

如果你真的需要超过 8000 个字符,你需要使用VARCHAR(MAX)最多可以存储 2 GB 的文本:

XYZ varchar(max)

这为您提供了多达 20 亿个字符——这是列夫·托尔斯泰的《战争与和平》的大约 200 倍——对于大多数情况来说应该足够了!

注意:如果您收到一个 SOAP 请求,那很可能是格式正确的 XML - 对吧?在这种情况下,您还可以使用XMLSQL Server 2005和更高版本的数据类型。它还可以存储多达 2 GB 的数据,但它比普通数据更有效地存储数据varchar(max)- 您可以对其运行 XPath/XQuery 以从中获取位。

所以我建议你使用:

XYZ XML
于 2013-01-08T06:01:24.197 回答
4

采用varchar(max)

varchar(n)是可变长度的非 Unicode 字符串数据。n定义字符串长度,可以是 1 到 8,000 之间的值。max 表示最大存储大小为 2^31-1 字节(2 GB)。

存储大小是输入数据的实际长度 + 2 个字节。

于 2013-01-08T06:01:43.750 回答
0

尝试从使用处理长文本的数据类型开始。我想到了“文字”。

于 2013-01-08T06:01:43.977 回答
0

使用文本数据类型,供参考http://msdn.microsoft.com/en-us/library/ms189574(v=sql.90).aspx

于 2013-01-08T06:03:07.650 回答
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
于 2016-02-04T06:32:53.133 回答