Есть ли аналог define в MSSQL?
От: Dumpy Россия  
Дата: 21.02.08 13:53
Оценка:
Приветствую всех! Предистория вопроса такова, нужно заставить CREATE PROCEDURE и DROP PROCEDURE брать имя из переменной.
др. словами есть контрукция:

if object_id ('my_proc') is not NULL DROP PROCEDURE my_proc
CREATE PROCEDURE my_proc
... бла бла бла

все работает, но неприятно тем, что при необходимости изменить имя процедуры, его надо будет переписать в 3х местах сразу (еще и в вызове потом тоже). А хотелось бы что-то типа:

declare @a sysname
set @a = 'my_proc'
if object_id (@a) is not NULL DROP PROCEDURE @a
CREATE PROCEDURE @a
... бла бла бла

но это не работает, drop и create не понимают что делать с @a наверно это логично...
Есть информация что в Оракле будет работать конструкция типа:

DEFINE a = "my_proc"
DROP PROCEDURE &a;

В MSSQL такого нет, точнее будет сказать я не нашел %) в связи с этим вопрос:
Есть ли аналог Ораклового DEFINE в MSSQL или другая возможность решить поставленную задачу?
Re: Есть ли аналог define в MSSQL?
От: Аноним  
Дата: 21.02.08 15:03
Оценка:
динамический sql?

sp_executesql
Re: Есть ли аналог define в MSSQL?
От: MasterZiv СССР  
Дата: 21.02.08 16:08
Оценка:
Dumpy пишет:
> все работает, но неприятно тем, что при необходимости изменить имя
> процедуры, его надо будет переписать в 3х местах сразу (еще и в вызове

Используйте внешний препроцессор. Например M4.
Или от С/C++.
Posted via RSDN NNTP Server 2.1 beta
Re: Есть ли аналог define в MSSQL?
От: Lloyd Россия  
Дата: 21.02.08 17:26
Оценка:
Здравствуйте, Dumpy, Вы писали:

D>В MSSQL такого нет, точнее будет сказать я не нашел %) в связи с этим вопрос:

D>Есть ли аналог Ораклового DEFINE в MSSQL или другая возможность решить поставленную задачу?

Про Setvar знаете? здесь
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Есть ли аналог define в MSSQL?
От: Dumpy Россия  
Дата: 22.02.08 07:31
Оценка:
sp_executesql к сожалению неудобно — процедура может быть изрядно здоровая и загонять всю ее в строку как то нехорошо, можно конечно таким образом сделать проверку и удаление процедуры а потом делать CREATE , но тогда всеравно имя придется писать в 2х местах т.е. что то типа

declare @a nvarchar (255)
set @a = N'MyProc'
if object_id (@a) is not NULL DROP PROCEDURE @a
begin
set @a = 'DROP PROCEDURE ' + @a
exec sp_executesql @a
end
create procedude MyProc
бла бла бла

и вот это самое "бла бла бла" божет быть довольно длинным и формировать из него строку чтобы потом sp_execuтнуть как о нехорошо...
возможео с sp_executesql можно будет както еще извернуться но я не смог пока придумать %(

Использовать внешний препроцессор я не могу — я тут не один, а остальной народ этого просто не поймет, можно конечно втихую все делать и во вне просто отдавать уже текст после препроцессина...

А sqlcmd и Setvar как я понял появились только c 2005 mssql server, я пока обречен работать с 2000 или я понял все неправильно?

Спасибо всем, кто поделился информацией буду теперь думать как поступить дальше %)
Re[3]: Есть ли аналог define в MSSQL?
От: Lloyd Россия  
Дата: 22.02.08 12:57
Оценка:
Здравствуйте, Dumpy, Вы писали:

D>А sqlcmd и Setvar как я понял появились только c 2005 mssql server, я пока обречен работать с 2000 или я понял все неправильно?


это вообще не sql server-ная фишка, а sqlcmd — клиентской тулзы. ты можешь использовать клиентский тулзы 2005-го сервера с 2000-м клиентом. ну или по крайней мере можешь попробовать спольщовать
... << RSDN@Home 1.2.0 alpha rev. 786>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.