MSSQL_varchar(8000)问题

摘要:MSSQL varchar(8000)问题


-----------MS SQL LOB 变量

---经实验即使是用varchar(max)也无法用单一指定超过8000位

declare@max varchar(max)

set@max=replicate('A',9000)

selectlen(@max)  --8000

      ,datalength(@max)--8000

--要超过需用"结合"的方式

declare@max varchar(max)

set@max=replicate('A',9000)--8000

set@Max=@MAX+replicate('B',8000)

selectlen(@max)  --16000

      ,datalength(@max)--16000

-----状况

DECLARE@qry VARCHAR(MAX), @qry1 VARCHAR(8000), @qry2 VARCHAR(8000)

SELECT  @qry1 = REPLICATE('a', 5000),

       @qry2 = REPLICATE('b', 5000)

SELECT@qry = @qry1 + @qry2

SELECTLEN(@qry), --8000=>竟不是10000??

      LEN(@qry1),--5000

      LEN(@qry2) --5000

--如何修正

SELECT@qry = CAST(@qry1 AS VARCHAR(MAX)) + CAST(@qry2 AS VARCHAR(max))--把qry1、qry2转换成varchar(max),其实只要qry1 或qry2 中有一个是varchar(max)即可弄出正确结果

SELECTLEN(@qry),--10000

      LEN(@qry1),--5000

      LEN(@qry2) --5000

---在2005的sp中

alter  proc #C

@i  varchar(max) output

as

set@i=replicate('A',8000)

set@i=@i+replicate('B',8000)

selectlen(@i)

GO

--PS:text、ntext 以及image 数据类型对本机变量(local variable)而言无效。

declare@k varchar(max),

       @i varchar(max)

set@i=replicate('C',10000)--单一指定即使是(max) 最多也只8000

exec#c @k output

set@i=@k+@i

selectlen(@k),--16000

        len(@i) --24000

/*

在2000的sp中 用text输出似乎会有以下问题

  • 无法替text类型的输出参数指定值=>error:The assignment operator operation cannot take a text data type as an argument.
  • text与varchar 无法结合(+)

3、若想以多个text值结合来突破8000的限制 =>error:Invalid operator for data type. Operator equals add, type equals text:add 操作符的算子数据类型text 无效。

*/

原文:大专栏  MSSQL_varchar(8000)问题


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11505190.html
今日推荐