Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Добрый день(утро, вечер, ночь..)!!! Если не трудно, помогите пожалуйста!!! Ситуация следующая - есть очень много хранимых процедур, текст которых отличается всего лишь названием таблицы.. Проблема - необходимо внести коррективы сразу во все хранимые процедуры (добавить выражение).. Вопрос - Как получить доступ к тексту хранимых процедур из внешней программы (С++)??? Или с помощью средств SQL -сервера (2000)? Заранее огромное спасибо!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2002, 09:39 |
|
||
|
Хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
-- Предлагаю процедуру, формирующую тексты всех (или одной) процедур текущей БД. -- Из ее текста можно понять где Sql Server хранит тексты процедур, но если они -- зашифрованы _ ничего не получится. CREATE PROCEDURE SP_GenScrSP -- Создание SQL скрипта создания/удаления процедур(ы). @obj sysname=NULL -- Имя процедуры -- Ошибки: 1 - неверный параметр -- ****** 2 - несуществующий об'ект -- 3 - скрипт не создан AS set nocount on -- 4 - ошибка SQL сервера declare @ID int, @r int, @p int, @OB sysname, @TTT sysname, @TXT varchar(8000), @COLID int, @S varchar(1000), @j int, @IDN int, @x char(1),@IDF int declare @ResTab table (i int NOT NULL identity, t varchar(300) NULL) -- 000000000000000000000000000000000000000000000000000000000000000000000000000 select @S='-- Drop & Create Objects. (c) "PolySystem" Kyiv' select @S=@S+space(15)+convert(varchar(10),getdate(),104)+' '+ convert(varchar(5),getdate(), insert into @ResTab values (@S) select @S='-- ============================================' select @S=@S+space(15)+'================' insert into @ResTab values (@S) insert into @ResTab values ('go') insert into @ResTab values ('') -- ........................................................................... declare cur_CreaProcDB cursor local for select id,name from sysobjects where xtype = 'P' and status >= 0 and OBJECTPROPERTY(id, N'IsProcedure') = 1 and name =isnull(@obj,name) order by name open cur_CreaProcDB fetch next from cur_CreaProcDB into @ID,@OB while (@@fetch_status != -1) begin if (@@fetch_status != -2) begin insert into @ResTab values ('if exists (select ''*'' from dbo.sysobjects'+ ' where id = object_id(N'''+@OB+''') and') insert into @ResTab values ('OBJECTPROPERTY(id, N''IsProcedure'') = 1)'+ ' drop procedure '+@OB) insert into @ResTab values ('go') select @TXT=convert(varchar(4000),text) from syscomments where id = @ID and colid = 1 select @r=charindex('create',@TXT), @TXT=substring(@TXT,@r,datalength(@TXT)-@r+1),@p=datalength(@TXT) while 1 = 1 begin select @r=charindex(char(13),@TXT) if @r = 0 select @r=charindex(char(10),@TXT) select @S=case when @r = 0 then @TXT else substring(@TXT,1,@r-1) end if @r = 0 break insert into @ResTab(t) values(@S) select @p=@p-@r if @p=0 begin select @S='' break end select @TXT=substring(@TXT,@r+1,@p),@r=charindex(char(10),@TXT) if @r = 1 begin select @p=@p-@r if @p=0 begin select @S='' break end select @TXT=substring(@TXT,@r+1,@p) end end select @COLID=2 while 1 = 1 begin select @TXT=NULL,@r=datalength(@S) set rowcount 1 select @TXT=convert(varchar(4000),text) from syscomments where id = @ID and colid = @COLID set rowcount 0 select @COLID = @COLID+1,@p=datalength(isnull(@TXT,'')) if @p = 0 begin if @r > 0 insert into @ResTab(t) values(@S) break end if @p = 0 break select @x=substring(@TXT,1,1) if @x = char(13) or @x = char(10) begin select @p=@p-1 if @p > 0 select @TXT=substring(@TXT,2,@p) select @x=substring(@TXT,1,1) if @x = char(13) or @x = char(10) begin select @p=@p-1 if @p > 0 select @TXT=substring(@TXT,2,@p) end if @r > 0 insert into @ResTab(t) values(@S) select @S='',@r=0 if @p = 0 break end select @r=charindex(char(13)+char(10),@TXT), @S=@S+case when @r = 1 then '' else substring(@TXT,1,@r-1) end, @p=@p-@r-1,@TXT=substring(@TXT,@r+2,@p) insert into @ResTab(t) values(@S) while 1 = 1 begin select @r=charindex(char(13),@TXT) if @r = 0 select @r=charindex(char(10),@TXT) select @S=case when @r = 0 then @TXT else substring(@TXT,1,@r-1) end if @r = 0 break insert into @ResTab(t) values(@S) select @p=@p-@r if @p=0 begin select @S='' break end select @TXT=substring(@TXT,@r+1,@p),@r=charindex(char(10),@TXT) if @r = 1 begin select @p=@p-@r if @p=0 begin select @S='' break end select @TXT=substring(@TXT,@r+1,@p) end end end insert into @ResTab values ('go') insert into @ResTab values ('') insert into @ResTab values ('') end fetch next from cur_CreaProcDB into @ID,@OB end deallocate cur_CreaProcDB -- =========================================================================== select t from @ResTab order by i if @@ROWCOUNT < 5 return 3 return 0 -- #### (c) "PolySystem" 26.09.99 ######################################### -- dalw@cis_kiev.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2002, 10:41 |
|
||
|
Хранимые процедуры
|
|||
|---|---|---|---|
|
#18+
Есть такая уже написанная процедура, можно и её текст посмотреть. sp_helptext Prints the text of a rule, a default, or an unencrypted stored procedure, user-defined function, trigger, or view. Syntax sp_helptext [ @objname = ] 'name' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2002, 11:20 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32023928&tid=1823759]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 312ms |

| 0 / 0 |
