2016-02-10 4 views
1

Я пытаюсь проверить, существует ли представление SQL Server и если оно не существует, создайте представление с динамическим скриптом и затем измените его.Проверьте, существует ли представление sql, а затем создайте его динамически, прежде чем изменять его.

Я использую следующий скрипт

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[test]') AND OBJECTPROPERTY(id,N'IsView') = 1) 
BEGIN 
    EXEC dbo.sp_executesql @statement = N' CREATE VIEW [dbo].[test] AS ' 
END 
GO 

ALTER VIEW [dbo].[test] 
--- 
--- 

Данный скрипт выдает эту ошибку

Msg 102, уровень 15, состояние 1, Процедура испытания, линия 1
Неправильный синтаксис около «AS ».

Могу ли я знать, как правильно это сделать?

+0

Попробуйте добавить простой ЗЕЬЕСТ, как: «CREATE VIEW [DBO] [тест] AS SELECT 0» –

+0

@TabAlleman Это будет работать как SPROC но представления требуется имя столбца –

ответ

3

Заявление CREATE не заполнено. Вы можете создать процедуру, отредактировав ее следующим образом.

CREATE VIEW [dbo].[test] AS SELECT 1 'foo' 

Как только он будет создан, вы можете перейти к его изменению.

Edit: Полностью спасся он будет выглядеть следующим образом:

EXEC dbo.sp_executesql @statement = N' CREATE VIEW [dbo].[test1] AS SELECT 1 ''foo'' ' 
0

У вас нет фактического определения вида в вашем коде. При этом, почему бы не просто отбросить представление, если оно существует, и тогда ваш код может просто создать представление вместо того, чтобы пытаться сделать ALTER?

+1

да, но опуская взгляд будет падать все разрешения для пользователей при создании нового представления вообще – DoIt

+1

Правда, хотя у меня обычно есть разрешения, входящие в состав моего процесса развертывания или включаемые как часть сценария объекта, поэтому для меня это не проблема. Полагаю, все зависит от того, как вы справляетесь с этим. –

Смежные вопросы