2010-01-05 102 views
1

我有一個奇怪的問題。我有一個函數通過連接其他幾個字符串來返回一個大的字符串。函數返回varchar(MAX)返回截斷字符串

在某些情況下,字符串太長而且會被截斷。

例如,有一個實例時長379999的字符串應該被退回,但我看到的是,該字符串被截斷,而且長度僅爲65536

我相信VARCHAR( MAX)可以容納一個大於65536的字符串,但是我在哪裏錯了?該功能如下所示。

[UPDATE]

這個函數是在幾個存儲過程被使用,並且所存儲的程序是由晶體的報告用於顯示數據。

[更新結束]

ALTER FUNCTION [dbo].[GetShipContSernText](
@shipContNum numeric(9)) returns Varchar(MAX) begin 

declare serns cursor for 


select 
    serial_number 
from 
    serial_number_view 
where 
    ship_cont_num = @shipContNum 
    and 
    template_id is null 

open serns; 

declare @text varchar(MAX); 
declare @serialNumber nvarchar(50); 

fetch next from serns into @serialNumber; 

while (@@FETCH_STATUS = 0) 
begin 
    -- cannot concat a null string. 

    if (@text is null) 
      set @text = @serialNumber; 
    else 
      set @text = @text + N', ' + @serialNumber; 
    end 
    fetch next from serns into @serialNumber; 
end; 

close serns; 
deallocate serns; 

return @text; 
end 

回答

0

該函數確實返回了一個超過65536個字符,我使用了LEN函數,發現它的長度要大得多。這是限制長度的網格。現在我需要找到爲什麼水晶報告會截斷字符串。 一堆感謝喬納斯的:)

2

是否有一個原因,你不能返回行和代碼串聯?

你在混合varchar和nvarchar。

此外,您還需要使用SQL Native Client才能夠使用varchar(max)作爲返回值。

+0

我不能在代碼中完成級聯因爲存儲的proc會提供一份水晶報告。 我使用的數據庫是SQL服務器2005年,我假設水晶報告也使用SQL本機客戶端來獲取數據,請糾正我,如果我錯了。 如果我在sql管理工作室中執行函數,我仍然得到一個長度爲65536的字符串。 – Nikhil 2010-01-05 10:38:48

+0

奇怪,因爲我剛剛嘗試了您的代碼,並且在SQL Server Management Studio中獲得了超過400000的長度。 – 2010-01-05 11:42:23

+0

哇!我一次又一次嘗試,但我仍然只得到一串長度爲65536. 我試圖讓「結果到文本」,令人驚訝的是我看到字符串更短。 我想知道它是如何爲你工作的。有沒有限制長度的設置? – Nikhil 2010-01-05 13:06:57