Конвертировать представление из SQL Server в Redshift - PullRequest
0 голосов
/ 26 октября 2018

У меня есть представление в SQL Server, которое мне нужно преобразовать в Redshift

Вот представление:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'dbo.BE_ContactRelationsDual') AND type in (N'V'))
    DROP VIEW public.contactrelationsdual;
GO

CREATE VIEW public.contactrelationsdual
WITH SCHEMABINDING
AS
SELECT  CASE d.id
        WHEN 0 THEN
                cr.contactId
        ELSE
                cr.relatedContactId
        END me,
        CASE d.id
        WHEN 0 THEN
                cr.relatedContactId
        ELSE
                cr.contactId
        END him,
        cr.id, 
        cr.permissionId
FROM    public.contact_relations cr
CROSS JOIN
        public.system_dual d
WHERE   cr.contactId > 0
        AND cr.relatedContactId > 0
        AND cr.deletedDate IS NULL
GO

CREATE UNIQUE CLUSTERED INDEX
        UX_BE_ContactRelationsDual_Me_Him
ON      public.contactrelationsdual (me, him)
GO

Мне нужно преобразовать его в красное смещение.У меня 2 проблемы:

Это:

CREATE VIEW public.contactrelationsdual
WITH SCHEMABINDING

и это:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'dbo.BE_ContactRelationsDual') AND type in (N'V'))     DROP
VIEW public.contactrelationsdual; GO

Как я могу правильнопреобразовать его в Redshift.

1 Ответ

0 голосов
/ 26 октября 2018

Удалить with schemabinding:

CREATE VIEW public.contactrelationsdual AS
SELECT (CASE d.id WHEN 0 THEN cr.contactId ELSE cr.relatedContactId
        END) as me,
       (CASE d.id WHEN 0 THEN cr.relatedContactId ELSE cr.contactId
        END) as  him,
        cr.id, 
        cr.permissionId
FROM public.contact_relations cr CROSS JOIN
     public.system_dual d
WHERE cr.contactId > 0 AND
      cr.relatedContactId > 0 AND
      cr.deletedDate IS NULL;

Это довольно стандартный SQL и должен работать практически на любой базе данных.

IF EXISTS деталь может быть заменена на:

drop view if exists public.contactrelationsdual;

Нет необходимости в кластеризованном индексе в Redshift.

...