我有一個奇怪的問題。我有一個函數通過連接其他幾個字符串來返回一個大的字符串。函數返回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
我不能在代碼中完成級聯因爲存儲的proc會提供一份水晶報告。 我使用的數據庫是SQL服務器2005年,我假設水晶報告也使用SQL本機客戶端來獲取數據,請糾正我,如果我錯了。 如果我在sql管理工作室中執行函數,我仍然得到一個長度爲65536的字符串。 – Nikhil 2010-01-05 10:38:48
奇怪,因爲我剛剛嘗試了您的代碼,並且在SQL Server Management Studio中獲得了超過400000的長度。 – 2010-01-05 11:42:23
哇!我一次又一次嘗試,但我仍然只得到一串長度爲65536. 我試圖讓「結果到文本」,令人驚訝的是我看到字符串更短。 我想知道它是如何爲你工作的。有沒有限制長度的設置? – Nikhil 2010-01-05 13:06:57