将视图从 SQL 服务器转换为 Redshift
Convert view from SQL Server to Redshift
我在 SQL 服务器中有视图,我需要将其转换为 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。
移除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 中不需要聚簇索引。
我在 SQL 服务器中有视图,我需要将其转换为 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。
移除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 中不需要聚簇索引。