Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выполнение нескольких EXEC / 6 сообщений из 6, страница 1 из 1
04.09.2002, 09:50:56
    #32047928
Alex_VB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение нескольких EXEC
Допустим есть ХП:

CREATE PROCEDURE dbo.DelCurrentTable
@NameTableOld sysname,
@NameTable varchar(100)
AS
if OBJECT_ID(@NameTableOld, 'U') IS NOT NULL
EXEC('DROP TABLE ' + @NameTableOld)
else
EXEC CreateNewTable @NameTable
GO

можно ли выполнить несколько директив EXEC подряд? Например удалить таблицу, и создать новую таблицую сразу после удаления, я делал вот так:

CREATE PROCEDURE dbo.DelCurrentTable
@NameTableOld sysname,
@NameTable varchar(100)
AS
if OBJECT_ID(@NameTableOld, 'U') IS NOT NULL
EXEC('DROP TABLE ' + @NameTableOld)
EXEC CreateNewTable @NameTable
else
EXEC CreateNewTable @NameTable
GO

но вылетает ошибка...
...
Рейтинг: 0 / 0
04.09.2002, 10:08:25
    #32047933
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение нескольких EXEC
Добавь в блок IF ... конструкцию BEGIN ... END
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE dbo.DelCurrentTable 
    @NameTableOld sysname, 
    @NameTable varchar( 100 ) 
    AS 
IF OBJECT_ID(@NameTableOld, 'U') IS NOT NULL BEGIN
    EXEC('DROP TABLE ' + @NameTableOld) 
    EXEC CreateNewTable @NameTable 
END
ELSE
    EXEC CreateNewTable @NameTable 
GO 

А правильнее было бы вообще так сделать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE dbo.DelCurrentTable 
    @NameTableOld sysname, 
    @NameTable varchar( 100 ) 
    AS 
IF OBJECT_ID(@NameTableOld, 'U') IS NOT NULL 
    EXEC('DROP TABLE ' + @NameTableOld) 

EXEC CreateNewTable @NameTable 
GO 

Зачем лишние команды?
...
Рейтинг: 0 / 0
04.09.2002, 10:17:21
    #32047940
Alex_VB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение нескольких EXEC
Команды не лишние...Просто в случае, если старая таблица существует, то я сначала удаляю старую, и тут же создаю новую, а в случае если старой таблицы нет, то просто создаю новую.
...
Рейтинг: 0 / 0
04.09.2002, 10:22:35
    #32047945
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение нескольких EXEC
Так второй скрипт тоже самое делает, только там один раз EXEC CreateNewTable @NameTable используется.

О! Нашел ошибку. Правильно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE dbo.DelCurrentTable 
    @NameTableOld sysname, 
    @NameTable varchar( 100 ) 
    AS 
BEGIN
    IF OBJECT_ID(@NameTableOld, 'U') IS NOT NULL 
        EXEC('DROP TABLE ' + @NameTableOld) 

    EXEC CreateNewTable @NameTable 
END
GO 
...
Рейтинг: 0 / 0
04.09.2002, 10:27:55
    #32047948
Alex_VB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение нескольких EXEC
Спасибо.
...
Рейтинг: 0 / 0
04.09.2002, 10:29:32
    #32047950
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнение нескольких EXEC
На здоровье
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выполнение нескольких EXEC / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]