#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 для разделения запросов на пакеты.