【发布时间】:2017-08-08 19:18:17
【问题描述】:
好的,这里是视图的示例代码。 select RT.RoleID[...] 的第二部分对我来说似乎很清楚。这是运行查询以使用视图时将显示的部分。第一部分虽然不清楚。
据我所知,前两行是标准行,然后是整个with 部分。有人可以向我解释吗?没见过with "something" as (select)公式
CREATE VIEW [dbo].[sviw_System_MyPermissions_CurrentDomain]
AS
WITH MyDomainRoles AS (
SELECT RM.Domain, RM.RoleID
FROM stbl_System_RolesMembersDomains AS RM WITH (NOLOCK)
WHERE RM.Domain = (SELECT CurrentDomain FROM stbl_System_Users WITH (NOLOCK) WHERE Login = SUSER_SNAME())
AND RM.Login = SUSER_SNAME()
)
SELECT RT.RoleID, RT.TableName, DR.Domain, RT.GrantUpdate, RT.GrantInsert, RT.GrantDelete
FROM stbl_System_RolesTables AS RT WITH (NOLOCK)
JOIN MyDomainRoles AS DR ON RT.RoleID = DR.RoleID
GO
【问题讨论】:
-
第一次编辑后,您的问题文本不再与您的示例代码匹配。
-
不要重新发明轮子:stackoverflow.com/questions/4740748/…。 WITH(公用表表达式(CTE))块就像内联视图/子查询,它已被重构为它自己的选择。如果必须多次执行选择以节省性能和维护时间,通常会这样做。
-
-- SQL Server 和 Azure SQL 数据库的语法 CREATE [OR ALTER] VIEW [schema_name. ] view_name [ (column [ ,...n ] ) ] [ WITH
[ ,...n ] ] AS select_statement [ WITH CHECK OPTION ] [ ; ] ::= { [ ENCRYPTION ] [ SCHEMABINDING ] [ VIEW_METADATA ] }
标签: sql sql-server tsql common-table-expression