현재 디테일 속성이있는 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의 옵션이 있습니다
기능 코드를 게시 할 수 있습니까? – steoleary
'fnGetColumnList' 내용을 게시 해주세요. –
질문 할 함수의 코드를 추가했습니다. 검토하시기 바랍니다. 감사. –