【问题标题】:How to store a string var greater than varchar(max)?如何存储大于 varchar(max) 的字符串 var?
【发布时间】:2012-08-19 07:48:45
【问题描述】:

我正在尝试这样做:

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

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

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

对于这种情况有什么好的解决方案?

xml 变量?

我刚刚看过这个帖子:

How do I pass a string parameter greater than varchar(8000) in SQL Server 2000?

Check if concatenating to a varchar(max) will go beyond max allowable characters

和其他人通过网络。

问候。

【问题讨论】:

  • 大于varchar(max) ??那是 2 GB 的数据 - 20 亿个字符 - 比列夫·托尔斯泰 (Leo Tolstoj) 的整个 战争与和平 小说的大小超过 200 倍......这就是 对你来说不够大?!?
  • @marc_s:问题似乎是在问为什么poster的变量在循环结束时只包含8000个字符;我认为标题具有误导性。也许发帖人可以编辑以澄清这里到底要问什么。
  • @KenWhite:请参阅我的回复以了解如何解决此问题。
  • 你是如何测试长度的?
  • @marc_s:看到了,点了赞。我只是想澄清张贴者实际上在问什么(并试图让他们编辑问题以这样做)。

标签: sql sql-server-2005 max varchar string-concatenation


【解决方案1】:

说真的 - 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 个字符的值。

重点是:如果您使用的是varchar(max),则需要确保始终将所有字符串强制转换显式地转换为varchar(max) - 就像我在本示例中所做的那样。否则,SQL Server 将回退到“常规”varchar 处理,并且确实限制为 8000 个字符....

【讨论】:

  • 如果没有明确的演员表,这对我来说很好。使用 REPLICATE 等内置函数时必须小心。
  • @AaronBertrand: 啊……很有趣 - 是的 - 它似乎工作得很好 - 即使没有演员......嗯......
  • @Murphy:像 SQL Server Mgmt Studio 这样的 UI 工具对它们的显示量有限制 - 是的,这很正常。
  • @Samer_Azar: varchar(max) also 根据需要分配内存
  • @A.Rashad: varchar(max) 存储最多 2 GB(或 20 亿)个字符。但众所周知,Management Studio 具有远低于该限制的某些限制 - 它实际上取决于 如何 您尝试插入该数据.....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2018-02-16
  • 2012-04-22
  • 1970-01-01
  • 2021-01-03
  • 2018-07-18
相关资源
最近更新 更多