Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужна строка более чем 8000 символов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
Что это за хитрый тип данных text? Как параметр его можно принять в процедуру, зато переменную этого типа объявить нельзя. Да и работать как со строкой не получается с text.
Задача, сформировать строку более 8000 символов, а затем отработать ее командой exec. Это динамическое создание функции, которая в последствии будет использоваться в других процедурах. Как тут можно обойти это ограничение, 8000 символов?
30 апр 04, 16:14    [660134]     Ответить | Цитировать Сообщить модератору
 Re: Нужна строка более чем 8000 символов  [new]
Вербняков Александр
Member

Откуда: г.Таганрог, Ростовская область
Сообщений: 498
declare @txt1 varchar(8000)
declare @txt2 varchar(8000)
declare @txt3 varchar(8000)
declare @txt4 varchar(8000)

exec (@txt1 + @txt2 + @txt3 + @txt4)

можно ещё через табличную переменную сделать
30 апр 04, 16:20    [660151]     Ответить | Цитировать Сообщить модератору
 Re: Нужна строка более чем 8000 символов  [new]
Underking
Member

Откуда: Rostov-on-Don
Сообщений: 488
Способ не очень приятен, ибо заранее тоже не известно, хватит ли 80000 символов или нет, а городить забор из условий при генерации тоже не очень приятно.
30 апр 04, 16:36    [660206]     Ответить | Цитировать Сообщить модератору
 Re: Нужна строка более чем 8000 символов  [new]
Glory
Member

Откуда:
Сообщений: 104760
Как-то так можно

use pubs

go
DECLARE @table varchar(8000), @column varchar(8000), @table2 varchar(8000)
SET @table = '(select pr_info from pub_info where pub_id = ''0736'') myalias'
SET @column = 'pr_info'
SET @table2 = replace(@table, '''', '''''')
exec('
SET TEXTSIZE 4000
DECLARE
@cnt int,
@c nvarchar(4000)
DECLARE
@declare varchar(8000),
@assign varchar(8000),
@concat varchar(8000)
SELECT @c = CONVERT(nvarchar(4000),'
+@column+') FROM '+@table+'
SELECT @declare = '
'DECLARE'',
@concat = '
''''''''''',
@assign = '
''',
@cnt = 0
WHILE (LEN(@c) > 0) BEGIN
SELECT @declare = @declare + '
' @c''+CAST(@cnt as nvarchar(15))+'' nvarchar(4000),'',
@assign = @assign + '
'
SELECT @c'
'+CONVERT(nvarchar(15),@cnt)+''= SUBSTRING(' + @column+',''+CONVERT(nvarchar(15), 1+@cnt*4000)+'', 4000) FROM '+@table2+''',
@concat = @concat + '
'+@c''+CONVERT(nvarchar(15),@cnt)
SET @cnt = @cnt+1
SELECT @c = CONVERT(nvarchar(4000),SUBSTRING('
+@column+',1+@cnt*4000,4000))
FROM '
+@table+'
END
IF (@cnt = 0) SET @declare = '
'''
ELSE SET @declare = SUBSTRING(@declare,1,LEN(@declare)-1)
SET @concat = @concat + '
'+''''''''''
print '
'--- Dynamic sql text ---
--------------------------------'
'
print(@declare+'
' ''+@assign+'' ''+''
print '
'+@concat+'''')
print '
'-----------------------------

--- Dynamic sql results ---
---------------------------'
'
EXEC(@declare+'
' ''+@assign+'' ''+''
print '
'+@concat+'''')
'
)
30 апр 04, 16:40    [660215]     Ответить | Цитировать Сообщить модератору
 Re: Нужна строка более чем 8000 символов  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
см. master.dbo.sp_execresultset
до 1,000,000 символов
30 апр 04, 16:42    [660219]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить