2013-03-08 2 views
0

В настоящее время у меня есть функция для получения списка столбцов из 1 таблицы с атрибутом detail. И, конечно же, есть несколько таблиц с большим количеством столбцов. Таким образом, выход будет содержать более 10.000 символов.Почему переменная с nvarchar (max) работает некорректно

Здесь я проверяю так:

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

Результат всегда имеет около 4000 символов. Похоже, что SQL усекала его.

Что я знаю, когда мы объявляем nvarchar (max), SQL поддерживает до 2^32-1 (2 ГБ) для этой строки. Но почему у него всего около 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

+1

Пожалуйста, напишите содержимое 'fnGetColumnList' –

+0

Я добавил код функции к вопросу. Пожалуйста ознакомтесь. Благодарю. –

ответ

0

Существует вариант в SQL Management Studio: Инструменты> Параметры ...> Результаты запроса> SQL Server> Результаты в текст> Максимальное количество отображаемых символов в каждом столбце

4

Это почти всегда присваивание переменной тип проблемы, как описано в разделе:

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

Если это не так, то это, вероятно, только настройки печати для отображения слишком мало символов:

nvarchar(max) still being truncated

Просмотрев обновленный код, кажется, что это вторая проблема, ваша печать обрезается, поскольку она не настроена на отображение достаточного количества символов.

Вы должны увидеть это, запустив

SELECT LEN(@aa) 

Вы получите число больше, чем 4000, показывая значение удерживается правильно в переменной.

+0

Я добавил код функции к вопросу. Пожалуйста ознакомтесь. благодаря –

Смежные вопросы