Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
Необходимо заменить скопом текст во всех хранимых процедурах по критерию.
Написал процедуру, которая выводит результат sp_helptext всех хранимых, анализирует текст и изменяет его.
Но для результата, чтобы изменить процедуру не хватает места в переменно nvarchar(max), какие могут быть альтернативы?
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 12:03    [7243469]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Brasileiro

Но для результата, чтобы изменить процедуру не хватает места в переменно nvarchar(max), какие могут быть альтернативы?

Т.е. у вас текст процедуры 2^31-1 байт что ли ?? Т.е. больше 2 Гигабайт ?
29 май 09, 12:06    [7243496]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
Да в том-то и дело, что выдает длину 16450 и потом - тишина
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 12:07    [7243503]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Brasileiro
Да в том-то и дело, что выдает длину 16450 и потом - тишина
______________________________
Все из Бразилии. www.brawoo.ru

Тогда проверяйте логику своего кода, а не ищите тип данных, который больше varchar(max)
29 май 09, 12:09    [7243517]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
[quot Brasileiro]Да в том-то и дело, что выдает длину 16450 и потом - тишина


а как вы видите, что не хватает места?
29 май 09, 12:09    [7243518]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
я получаю построчно результат, его просто прибавляю в таком виде:
set @sql = @sql +@txt

оба @sql и @txt - nvarchar(max)
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 12:09    [7243523]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Brasileiro
я получаю построчно результат, его просто прибавляю в таком виде:
set @sql = @sql +@txt

оба @sql и @txt - nvarchar(max)
[/url]


и что? ошибка "мне не хватает места" ?
29 май 09, 12:10    [7243529]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
aleks2
Guest
Brasileiro,

Экспортируете в EM или шо его там сейчас заменяет в текстовый файл, заменяете в Word-е и грузите обратно.
Дешево и сердито.
29 май 09, 12:10    [7243535]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
declare @txt nvarchar(max),
	@sql nvarchar(max)
set @sql = ''
IF OBJECT_ID('tempdb..#MyTab') IS NOT NULL
	DROP TABLE #MyTab

create table #MyTab (txt NVARCHAR(255))
insert into #MyTab
exec sp_helptext 'procedure1' 
declare mcur cursor local for 
	select * from #myTab 
open mcur
fetch next from mcur into @txt

while @@fetch_status = 0 
begin
	if PATINDEX ('%pattern%', @txt)<>0
	begin
		set @txt = Replace(@txt, 'pattern', 'replace_string')
	end
	set @sql = @sql +@txt
	print @txt
	fetch next from mcur into @txt
end
print @sql
close mcur
deallocate mcur
То, что выдает print @txt отличается от print @sql
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 12:14    [7243554]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
Нет, не пишет, что не хватает места, просто обрезает исходник, поэтому не могу сделать криэйт.
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 12:16    [7243569]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Brasileiro

То, что выдает print @txt отличается от print @sql

А почему он должен совпадать, если в @txt текущая строка курсора, а в @sql сумма предыдущих строк курсора ?
29 май 09, 12:20    [7243596]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Brasileiro
Нет, не пишет, что не хватает места, просто обрезает исходник, поэтому не могу сделать криэйт.


Чем вы смотрите результат? SSMS? Results TO Text пробовали?
29 май 09, 12:23    [7243610]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а может просто стоить настроить вывод более длиной строки в редакторе ???
может просто результат на екране обрезается при выводе ????
-------------------------------------
Jedem Das Seine
29 май 09, 12:24    [7243619]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
Я пытался просто вставить exec @sql, на что получил ругань синтаксиса, только после этого стал смотреть что у меня в переменной.
Я имел в виду, что курсор выдает все строки процедуры, а @sql не все.
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 12:31    [7243669]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а какое сообщение об ошибке оригинальное ?
может там тупо запятой где то хватет ??
или вместо alter procedure стоит create без drop ?
-------------------------------------
Jedem Das Seine
29 май 09, 12:43    [7243745]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Brasileiro
Я пытался просто вставить exec @sql, на что получил ругань синтаксиса, только после этого стал смотреть что у меня в переменной.
Я имел в виду, что курсор выдает все строки процедуры, а @sql не все.

В переменной то, что вы туда занесли.
29 май 09, 12:45    [7243763]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
У вас не хватает строк или текст не полный (обрезаны только последние строки)? Чем вы смотрите?
29 май 09, 12:48    [7243785]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5195
Brasileiro
Необходимо заменить скопом текст во всех хранимых процедурах по критерию.
Написал процедуру, которая выводит результат sp_helptext всех хранимых, анализирует текст и изменяет его.
Но для результата, чтобы изменить процедуру не хватает места в переменно nvarchar(max), какие могут быть альтернативы?
______________________________
Все из Бразилии. www.brawoo.ru


а OBJECT_DEFINITION () пробовали вместо sp_helptext ?
29 май 09, 12:51    [7243802]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
Ладно, беру все, что написал курсор print @txt - код выполняется!
exec @sql - не выполняется, тоже ссложилось ощущение, что не хватает длины, но ругает абсолютно в другом месте.
print @sql - не выдает целиком хранимую процедуру.
Может быть, я дурак, так покажите мне, где в переменной я урезал текст???
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 12:56    [7243832]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
komrad
Brasileiro
Необходимо заменить скопом текст во всех хранимых процедурах по критерию.
Написал процедуру, которая выводит результат sp_helptext всех хранимых, анализирует текст и изменяет его.
Но для результата, чтобы изменить процедуру не хватает места в переменно nvarchar(max), какие могут быть альтернативы?
______________________________
Все из Бразилии. www.brawoo.ru


а OBJECT_DEFINITION () пробовали вместо sp_helptext ?
+106
Неизвестно вообще, что получftncz из sp_helptext, ибо режутся длинные строки.
29 май 09, 12:58    [7243842]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Glory
Member

Откуда:
Сообщений: 104760
exec @sql - это запуск процедуры, имя которой занесено в переменную
а вот exec(@sql) - это запуск динамического запроса
Читать нужно сообщения, которые вам сервер выдает
29 май 09, 12:59    [7243855]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
DECLARE @sql NVARCHAR(MAX);
SET @sql=REPLACE(OBJECT_DEFINITION(OBJECT_ID(N'procedure1','P')),N'pattern',N'replace_string');
EXECUTE(@sql);
Только действительно надо убедиться, что срипт начинается с DROP PROCEDURE или содержит ALTER PROCEDURE, а не CREATE PROCEDURE
29 май 09, 13:02    [7243887]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
Действительно, так сработало, огромное спасибо!
______________________________
Все из Бразилии. www.brawoo.ru
29 май 09, 13:16    [7244014]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Brasileiro
Действительно, так сработало, огромное спасибо!
______________________________
Все из Бразилии. www.brawoo.ru


как именно сработало?
29 май 09, 13:32    [7244166]     Ответить | Цитировать Сообщить модератору
 Re: Целого varchar(max) мало!  [new]
Brasileiro
Member

Откуда:
Сообщений: 203
Так, как ниписал iap, вот теперь, пока обрабатываются процедуры, сижу и думаю, а почему не сработал мой скрипт?
29 май 09, 13:51    [7244324]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить