2013-03-08 103 views
0

目前,我有一個函數,以獲得具有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 

請前進。

+1

你能發表該函數的代碼嗎? – steoleary 2013-03-08 09:40:50

+1

請發佈'fnGetColumnList'內容 – 2013-03-08 09:41:03

+0

我添加了函數的代碼問題。請查閱。謝謝。 – 2013-03-08 10:07:01

回答

0

在SQL Management Studio中的一個選項: 工具>選項...>查詢結果> SQL服務器>結果爲文本>中的每一列

4

顯示的字符的最大數量這幾乎總是一個變量賦值鍵入問題,如解釋說:

For Nvarchar(Max) I am only getting 4000 characters in TSQL?

如果它不是,那麼它可能只是打印的設置,以顯示過幾個大字:

nvarchar(max) still being truncated

查看了更新後的代碼,看起來好像是第二個問題,因爲它沒有設置顯示足夠的字符,所以您的打印被截斷。

你應該通過運行

SELECT LEN(@aa) 

看到這一點,你會得到4000多家較大,顯示在可變正確保存的值。

+0

我添加了功能的代碼問題。請查閱。謝謝 – 2013-03-08 10:13:44