Create view должна быть первой инструкцией в пакете

#sql #.net #view

#sql #.net #Вид

Вопрос:

Я запускаю набор файлов сценариев из приложения Windows на базе .NET. Один из файлов содержит следующий скрипт —

 IF EXISTS(SELECT * FROM SYS.VIEWS WHERE NAME = 'TP_LEAVEDATA') EXEC SP_RENAME 'TP_LEAVEDATA', 'TP_LEAVEDATA_BKP_EXPORT_TEST1' 
CREATE VIEW TP_LEAVEDATA AS
SELECT USERNAME, Dept, LeaveType, LeaveFrom, LeaveUpto FROM LeaveRequest_DATA
  

Когда я выполняю скрипт, я получаю сообщение об ошибке create view должна быть первой инструкцией в пакете

Я не могу использовать здесь ключевое слово GO, потому что я запускаю скрипты через свое приложение, я не могу использовать execute sp_executesql, потому что есть похожие файлы для создания хранимых процедур (которые содержат одиночные кавычки внутри самого запроса). Какие варианты у меня есть сейчас??

PS: Проблема не возникает с командой create table.

Ответ №1:

Вы можете использовать put GO перед ней:

 IF EXISTS(SELECT * FROM SYS.VIEWS WHERE NAME = 'TP_LEAVEDATA') BEGIN
    EXEC SP_RENAME 'TP_LEAVEDATA', 'TP_LEAVEDATA_BKP_EXPORT_TEST1' ;
END;
GO

CREATE VIEW TP_LEAVEDATA AS
    SELECT USERNAME, Dept, LeaveType, LeaveFrom, LeaveUpto
    FROM LeaveRequest_DATA;
  

Другой вариант — использовать динамический SQL для создания представления.

Комментарии:

1. И не забывайте, что при необходимости вам, возможно, придется предоставить разрешения для вашего нового представления. Особенно, если ваше приложение обращается к вашему SQL через выделенного пользователя.

2. Я все еще получаю ошибку — «Неправильный синтаксис рядом с ‘GO’.’CREATE VIEW’ должно быть первой инструкцией в пакете запроса».

3. Я думаю, что ‘GO’ понимается только клиентами SQL Server для разделения запросов на пакеты.