目前,我有一個函數,以獲得具有detail屬性的1個表的列的列表。當然,還有一些表格有很多列。所以,輸出將超過10,000個字符。爲什麼變量與nvarchar(最大)工作不正確
在這裏,我測試是這樣的:
declare @aa nvarchar(max)
set @aa = dbo.fnGetColumnList('Table_Name')
print @aa
結果總是有大約4000個字符。它看起來像SQL已經截斷它。
我知道當我們聲明nvarchar(max)時,SQL將爲此字符串支持最多2^32-1(2GB)。但爲什麼它只有大約4000個字符?
當我執行這樣的:
select dbo.fnGetColumnList('Table_Name')
的結果是正確的。
這裏是該函數的代碼:
-- get column list from table Mapping
ALTER FUNCTION [dbo].[fnGetColumnList] (@tblName varchar (30))
RETURNS nvarchar(max)
AS
BEGIN
Declare @sql nvarchar(max)
set @sql = ''
SELECT @sql = @sql + case
when CHARINDEX('char', LOWER([DBType])) > 0 then ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' ('+convert(varchar(10),[Length])+') NULL' + CHAR(13)
when CHARINDEX('char', LOWER([DBType])) > 0 then ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' NULL' + CHAR(13)
ELSE ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' NULL' + CHAR(13)
end FROM dbo.Mapping WHERE [DBTable] = @tblName
return @sql
END
請前進。
你能發表該函數的代碼嗎? – steoleary 2013-03-08 09:40:50
請發佈'fnGetColumnList'內容 – 2013-03-08 09:41:03
我添加了函數的代碼問題。請查閱。謝謝。 – 2013-03-08 10:07:01