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

Откуда:
Сообщений: 763
Процедура с правами администратора удаляет себя, например, так
create proc q as
select * from sysobjects where xtype='p' and name='q'
drop proc q
select * from sysobjects where xtype='p' and name='q'
-- здесь основные действия

Какие побочные эффекты при выполнении могут быть после drop proc, при перекомпиляции, например? Чего нельзя делать, чтобы процедура выполнила успешно основные действия? Сделать временную процедуру(##)- не предлагать.
4 дек 14, 16:54    [16951022]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Я не думаю, что у вас получиться удалить процедуру из самой себя.

Разве что, через одно место. Создать джобу, которая запуститься через некоторое время и удалит процедуру. Но кто удалит эту джобу?
4 дек 14, 17:01    [16951079]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
a_voronin
Я не думаю, что у вас получиться удалить процедуру из самой себя.

Разве что, через одно место. Создать джобу, которая запуститься через некоторое время и удалит процедуру. Но кто удалит эту джобу?
Вот джобу как раз одноразоывую и самоудаляющуюся сделать очень просто.
Делать это в процедуре? Ну, не знаю.

Сообщение было отредактировано: 4 дек 14, 17:05
4 дек 14, 17:05    [16951096]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Когда появилась Windows, самым популярным был вопрос "Как убрать значок из панели задач?". Видимо программисты переквалифицируются на базы данных, но на новом витке диалектической спирали.
4 дек 14, 17:14    [16951186]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Сделать временную процедуру(##)- не предлагатьc

А уволить разработчика предлагать?
4 дек 14, 17:17    [16951207]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
a_voronin
Я не думаю, что у вас получиться удалить процедуру из самой себя.
Приведённый код- рабочий. Вопрос- в том, чего нельзя делать в процедуре, чтобы она после своего удаления доработала до конца при отсутствии других ошибок.

a_voronin
Создать джобу, которая запуститься через некоторое время и удалит процедуру. Но кто удалит эту джобу?
Это должно работать и на Express, где нет агента.
4 дек 14, 17:22    [16951251]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 610
Вот пример обсуждения, пробовал, вроде работает.
4 дек 14, 17:51    [16951496]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
Диклевич Александр
Вот пример обсуждения, пробовал, вроде работает.

Спасибо, осталось понять, какие действия нельзя делать после её удаления.
4 дек 14, 18:01    [16951550]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
tunknown
Диклевич Александр
Вот пример обсуждения, пробовал, вроде работает.

Спасибо, осталось понять, какие действия нельзя делать после её удаления.
Вопрос какой-то странный. Боитесь -- не делайте _ничего_ после ее удаления, т.е. вставьте удаление последним в процедуре.
4 дек 14, 18:17    [16951659]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
Гавриленко Сергей Алексеевич
Боитесь -- не делайте _ничего_ после ее удаления, т.е. вставьте удаление последним в процедуре.

Если удаление идёт последним, то при некоторых ошибках в процедуре до него не дойдёт дело. Try/Catch не годится, должно работать универсальнее, в т.ч. и на sql 2000. Сборку мусора делать нежелательно.
5 дек 14, 10:23    [16953721]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
tunknown
Гавриленко Сергей Алексеевич
Боитесь -- не делайте _ничего_ после ее удаления, т.е. вставьте удаление последним в процедуре.

Если удаление идёт последним, то при некоторых ошибках в процедуре до него не дойдёт дело. Try/Catch не годится, должно работать универсальнее, в т.ч. и на sql 2000. Сборку мусора делать нежелательно.
По-моему, пора рассказать, какую такую задачу вы решаете таким весьма странным образом.
5 дек 14, 10:26    [16953737]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Да, автор, что именно ты пытаешься сделать?
5 дек 14, 10:39    [16953840]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Glory
Member

Откуда:
Сообщений: 104760
Cammomile
Да, автор, что именно ты пытаешься сделать?

Эмуляцию временных процедур :) - "Сделать временную процедуру(##)- не предлагать."
5 дек 14, 10:43    [16953880]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
самый точный совет было от Гавриленко Сергей Алексеевич

Гавриленко Сергей Алексеевич
a_voronin
Но кто удалит эту джобу?

Делать это в процедуре? Ну, не знаю.
---- ха ха ха

+ + +
Вопрос какой-то странный. Боитесь -- не делайте _ничего_ после ее удаления, т.е. вставьте удаление последним в процедуре
--- а сдесь что то думал
5 дек 14, 14:32    [16955821]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
Гавриленко Сергей Алексеевич
tunknown
пропущено...

Если удаление идёт последним, то при некоторых ошибках в процедуре до него не дойдёт дело. Try/Catch не годится, должно работать универсальнее, в т.ч. и на sql 2000. Сборку мусора делать нежелательно.
По-моему, пора рассказать, какую такую задачу вы решаете таким весьма странным образом.

Похоже на вирусный код. Запустить процедуру, которая сделает банковский перевод, а потом убьётся об стену.
ТС хочет, чтобы убилась 100%-но, чтобы не запалиться :))
6 дек 14, 16:29    [16960652]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
Glory
Эмуляцию временных процедур :) - "Сделать временную процедуру(##)- не предлагать."

Верно, эмуляцию сделать. Процедуру стирать, чтобы вручную за этим не следить- код предполагается настолько необслуживаемым, насколько это возможно. Админские права есть- это основное условие работы.

Такой метод выбран чтобы следы работы были в виде присутствия процедуры на время её работы, возможно, длительной. Процедуру ## применить нельзя, т.к. предполагается создавать процедуру и выполнять её через linked server, т.е. не за одну сессию и она успеет пропасть.
8 дек 14, 10:37    [16964857]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Glory
Member

Откуда:
Сообщений: 104760
tunknown
Процедуру стирать, чтобы вручную за этим не следить

Зачем стирать процедуру, которую нужно выполнять много раз ?
Зачем одноразовый код оформлять в виде процедуры ?

tunknown
Процедуру ## применить нельзя, т.к. предполагается создавать процедуру и выполнять её через linked server, т.е. не за одну сессию и она успеет пропасть.

И зачем это делать с локального сервера ?
8 дек 14, 10:40    [16964876]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
Glory
Зачем стирать процедуру, которую нужно выполнять много раз ?
Её содержимое собирается динамически и может отличаться от раза к разу.
Glory
Зачем одноразовый код оформлять в виде процедуры ?
Так удобнее работать при незначительных накладных расходах на создание, хотя бы на этапе отладки-внедрения.
Glory
И зачем это делать с локального сервера ?
В целях централизации. Локальный сервер с агентом, linked сервера могут быть без него.
8 дек 14, 11:32    [16965173]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Glory
Member

Откуда:
Сообщений: 104760
tunknown
Glory
Зачем одноразовый код оформлять в виде процедуры ?
Так удобнее работать при незначительных накладных расходах на создание, хотя бы на этапе отладки-внедрения.

В чем удобство, если "Её содержимое собирается динамически и может отличаться от раза к разу" ?
Если нужно выполнить произвольный скрипт на удаленном сервере, то что мешает выполнять sqlcmd с нужными параметрами ?
8 дек 14, 11:40    [16965231]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
Glory
В чем удобство, если "Её содержимое собирается динамически и может отличаться от раза к разу" ?
Хотя бы в том, что процедура какое-то присутствует в списке объектов.
Glory
Если нужно выполнить произвольный скрипт на удаленном сервере, то что мешает выполнять sqlcmd с нужными параметрами ?
Linked server уже существует и содержит все параметры, в sqlcmd эти параметры нужно подавать заново и где-то отдельно хранить.
8 дек 14, 12:19    [16965480]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Glory
Member

Откуда:
Сообщений: 104760
tunknown
Glory
В чем удобство, если "Её содержимое собирается динамически и может отличаться от раза к разу" ?
Хотя бы в том, что процедура какое-то присутствует в списке объектов.

Зачем нужно ее присутствие в списке в течении нескольких секунд/минут ?

tunknown
Linked server уже существует и содержит все параметры, в sqlcmd эти параметры нужно подавать заново и где-то отдельно хранить.

Ну так Linked server-а тоже не из воздуха появляются.
8 дек 14, 12:22    [16965504]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
Glory
Зачем нужно ее присутствие в списке в течении нескольких секунд/минут ?
Примитивный контроль.

Glory
tunknown
Linked server уже существует и содержит все параметры, в sqlcmd эти параметры нужно подавать заново и где-то отдельно хранить.

Ну так Linked server-а тоже не из воздуха появляются.
В любом случае настройки доступа нужно где-то хранить. Выбран такой метод.
8 дек 14, 13:08    [16965812]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
Glory
Member

Откуда:
Сообщений: 104760
tunknown
Glory
Зачем нужно ее присутствие в списке в течении нескольких секунд/минут ?
Примитивный контроль.

По-моему, вы какую-то фигню говорите.


tunknown
В любом случае настройки доступа нужно где-то хранить. Выбран такой метод.

У каждого метода есть ограничения. Вы получили свои ограничения.
8 дек 14, 13:14    [16965857]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
edyaN
Member

Откуда:
Сообщений: 185
tunknown,

твое решение плохое. не расширяемое, трудноподдерживаемое и с кучей побочных эффектов и ограничений. Найди другой способ решить свою задачу.
Что должно произойти, если это запустят из двух разных соединений одновременно или почти одновременно?
8 дек 14, 14:35    [16966416]     Ответить | Цитировать Сообщить модератору
 Re: удалить процедуру из самой себя  [new]
tunknown
Member

Откуда:
Сообщений: 763
edyaN
твое решение плохое. не расширяемое, трудноподдерживаемое и с кучей побочных эффектов и ограничений. Найди другой способ решить свою задачу.
Ищу разные способы, приведённый- один из них.
edyaN
Что должно произойти, если это запустят из двух разных соединений одновременно или почти одновременно?
У процедур в имени стоит уникальный разделитель, ничего опасного произойти не должно.
8 дек 14, 16:26    [16967244]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить