22

我正在尝试这样做:

DECLARE @myVar VARCHAR(MAX)
Loop with cursor
select @myVar = @myVar + bla bla bla
end loop

当循环结束时,@myVar 不完整,仅包含 8000 个字符。

我尝试使用文本,但不允许使用本地变量。

这个案子有什么好的解决办法?

xml变量?

我刚刚看过这个帖子:

如何在 SQL Server 2000 中传递大于 varchar(8000) 的字符串参数?

检查连接到 varchar(max) 是否会超出最大允许字符数

和其他人通过网络。

问候。

4

1 回答 1

38

说真的 -VARCHAR(MAX)最多可以存储 2 GB 的数据 - 而不仅仅是 8000 个字符......

试试这个:

DECLARE @myVar VARCHAR(MAX) = ''

DECLARE @ix INT = 1

WHILE @ix < 1000
BEGIN
    set @myVar = @myVar + CAST('bla bla bla' AS VARCHAR(MAX))
    SET @ix = @ix + 1
END

SELECT DATALENGTH(@myvar)

这将在 1000 次迭代后返回大于 8000 个字符的值。

The point is: if you're using varchar(max), you need to make sure to always cast all your strings to varchar(max) explicitly - as I did in this example. Otherwise, SQL Server will fall back to "regular" varchar processing, and that's indeed limited to 8000 characters....

于 2012-08-23T18:18:53.090 回答