Не может использовать, ЕСЛИ для создают или изменяют представление в зависимости от существования представления

14
задан ProfK 10 March 2009 в 21:14
поделиться

4 ответа

Поскольку ИЗМЕНЯЮТСЯ/СОЗДАЮТ, команды не могут быть в, НАЧИНАЮТ/ЗАКАНЧИВАЮТ блоки. Необходимо протестировать на существование и отбрасывание его прежде, чем сделать создавание

IF Object_ID('TestView') IS NOT NULL
    DROP VIEW TestView

GO

CREATE VIEW TestView
   as
   . . .

GO

, Если Вы волнуетесь по поводу полномочий, потерянных, можно написать сценарий операторов GRANT также и повторно выполнить тех, которые в конце.

Вы могли обернуть создавание/изменение в строку и сделать ДОЛЖНОСТНОЕ ЛИЦО - который мог бы стать ужасным для больших представлений

DECLARE @SQL as varchar(4000)

-- set to body of view
SET @SQL = 'SELECT X, Y, Z FROM TABLE' 

IF Object_ID('TestView') IS NULL
    SET @SQL = 'CREATE VIEW TestView AS ' + @SQL
ELSE    
    SET @SQL = 'ALTER VIEW TestView AS ' + @SQL

EXEC(@SQL)
20
ответ дан 1 December 2019 в 07:13
поделиться

Уважаемый коллега помог мне на этом:

if object_id('demoView') is null
    sp_executesql 'create view demoView as select * from demoTable'

работает просто великолепно.

5
ответ дан 1 December 2019 в 07:13
поделиться

Необходимо отбросить представление, если оно создается тогда, только делают изменение

IF OBJECT_ID('TestView') IS NOT NULL
BEGIN 

DROP VIEW TestView
END

GO

CREATE VIEW TestView

AS 

SELECT * FROM TestTable
1
ответ дан 1 December 2019 в 07:13
поделиться

При чтении остальной части сообщения об ошибке, это укажет, что создают представление, должен быть первый оператор или что-то вдоль тех строк.

Попытка:

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[testView]'))
    DROP VIEW [dbo].[testView]
GO

CREATE VIEW [dbo].[testView]
AS
-1
ответ дан 1 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: