MSSQL_varchar(8000)問題

  • 4751
  • 0
  • 2012-02-09

摘要: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 無效。

 

*/