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

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

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

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]
---
---

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

Сообщение 102, Уровень 15, Состояние 1, Процедурное тестирование, Строка 1
Неверный синтаксис рядом с 'AS'.

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

2 ответа

Решение

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

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

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

Изменить: Полностью экранированный это будет выглядеть так:

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

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

Другие вопросы по тегам