2013-03-08 6 views
0

현재 디테일 속성이있는 1 개의 테이블 열 목록을 가져 오는 기능이 있습니다. 그리고 물론, 컬럼이 많은 테이블이 있습니다. 따라서 출력은 10.000자를 넘습니다.nvarchar (max)가있는 변수가 올바르지 않은 이유

여기에 나는이 같은 테스트 :

declare @aa nvarchar(max) 
set @aa = dbo.fnGetColumnList('Table_Name') 
print @aa 

결과는 항상 약 4000 문자가 있습니다. SQL이 그것을 자른 것처럼 보입니다.

우리가 nvarchar (max)를 선언 할 때 SQL은이 문자열에 최대 2^32-1 (2GB)를 지원한다는 것을 알고 있습니다. 그런데 왜 단지 4000 자 정도입니까?

는 I는 다음과 같이 실행하면 :

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 

가 진행해주세요 :

그리고 여기 함수에 대한 코드입니다. SQL Management Studio의 옵션이 있습니다

+1

기능 코드를 게시 할 수 있습니까? – steoleary

+1

'fnGetColumnList' 내용을 게시 해주세요. –

+0

질문 할 함수의 코드를 추가했습니다. 검토하시기 바랍니다. 감사. –

답변

0

: 도구> 옵션 ...> 질의 결과> SQL 서버> 결과 텍스트> 각 열

4

에 표시되는 문자의 최대 수는 이것은 거의 항상 변수 할당입니다

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

는이 아니라면 다음 그냥 인쇄의 설정이 너무 적은 문자 표시 아마, :

을에 설명 된대로 문제를 입력 nvarchar(max) still being truncated

업데이트 된 코드를 살펴보면 두 번째 문제인 것처럼 보이며 충분한 문자가 표시되지 않도록 인쇄물이 잘 리게됩니다.

당신은 변수에 제대로 유지되는 값을 보여주는, 당신은 4000보다 큰 숫자를 얻을 것이다

SELECT LEN(@aa) 

을 실행하여이 표시됩니다.

+0

문제의 코드를 추가했습니다. 검토하시기 바랍니다. 감사 –

관련 문제