Как выполнить проверку IF / ELSE при создании представления - PullRequest
0 голосов
/ 09 мая 2018

Я пишу сценарий для создания представления, только если представление еще не существует. Если представление уже существует, я не хочу изменять его или удалять и заново создавать. Синтаксис ниже, очевидно, не полный, и генерирует ошибку, потому что CREATE VIEW должен быть в своем собственном пакете - но как правильно построить мой вариант использования?

IF OBJECT_ID('dbo.view_name') IS NULL 
BEGIN    
  CREATE VIEW [dbo].[view_name]
  AS
      SELECT ...;
END
ELSE
  ...

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Я изменил SQL, чтобы быть следующим. Чтобы избежать ошибки «CREATE VIEW должно быть в своем пакете», я поместил «CREATE VIEW» в оператор exec(''). Это работает!

USE [XXXXXXXXX]
    GO

    /****** Object:  View [CXXXXXXX].[_MobileMessageTracking_v2]    Script Date: 5/4/2018 3:19:04 PM ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    IF Object_id('CXXXXXXX._MobileMessageTracking_v2') IS NULL BEGIN

    exec('CREATE VIEW [CXXXXXXX].[_MobileMessageTracking_v2]
            AS
                    SELECT  
                        /* fields here */
                    FROM CXXXXXXXX._MobileMessageTracking AS M WITH (NOLOCK)
                    WHERE M.MID = XXXXXXX
                                    AND M.CreateDateTime >= DATEADD(mm,-6, GETDATE())

                    UNION
                    select
                        /* fields here */')
    END

    GO
0 голосов
/ 09 мая 2018

SQL Server 2016 имеет CREATE OR ALTER.

CREATE OR ALTER VIEW vw_your_view 
AS 
SELECT 1 FROM your_Table
GO

Это взорвется, если вы переместите его в среду ниже SQL Server 2016. Если это так, используйте то, что у вас есть, и проверьте идентификатор объекта.

...