在架构内创建多个视图 - SQL Server

Posted

技术标签:

【中文标题】在架构内创建多个视图 - SQL Server【英文标题】:Create multiple views inside a schema - SQL Server 【发布时间】:2012-12-09 13:01:14 【问题描述】:

如何在CREATE SCHEMA 语句中创建多个视图?

我想创建一个SCHEMA,并在同一个语句中在其中创建两个视图,所以所有这些语句都作为一个单元工作?一起成功或失败!

来自 MSDN:http://msdn.microsoft.com/en-us/library/ms189462.aspx

"CREATE SCHEMA 可以创建一个模式,它包含的表和视图, 和 GRANT、REVOKE 或 DENY 权限对单个中的任何安全对象 陈述。 CREATE SCHEMA 事务是原子的。如果发生任何错误 在执行 CREATE SCHEMA 语句期间,没有 已创建指定的安全对象,但未授予任何权限。”

,

我该怎么做?我试过这个:

CREATE SCHEMA [MYSCHEMA] AUTHORIZATION [dbo]
    CREATE VIEW [VIEW1]
    AS 
        SELECT [ID]
               ,[NAME]
                FROM [dbo].[TABLE1]
        /* Here is the Problem */
        GO

        CREATE VIEW [VIEW2]
        AS
        SELECT [ID]
               ,[NAME]
                FROM [dbo].[TABLE2]
        GO

如果我在创建第一个视图之后包含 GO 语句,则脚本运行,但第二个视图 VIEW2 是在 dbo 架构下创建的,而不是在 MYSCHEMA 下创建的,并且不会作为单个单元运行要么。

如果我在第一次查看后删除GO,那么它会给出一个错误提示

CREATE VIEW 必须是批处理的第一条语句

第二个CREATE VIEW 声明。

我该如何解决这个问题并将两个视图都创建为CREATE SCHEMA 语句的一部分?

【问题讨论】:

如果您想将View1 放入MySchema - 只需在创建时为视图名称加上架构前缀:CREATE VIEW MySchema.View1 AS ... @marc_s,是的,我知道,但是它们不会作为一个单元。做我的方式将确保要么一切都被创造,要么什么都没有。在这种情况下,这对我很重要。 @marc_s,取自 MSDN “CREATE SCHEMA 可以创建模式、它包含的表和视图,以及在单个语句中对任何安全对象的 GRANT、REVOKE 或 DENY 权限。CREATE SCHEMA 事务是原子的. 如果在执行 CREATE SCHEMA 语句期间发生任何错误,则不会创建任何指定的安全对象,也不会授予任何权限。”,这就是我要找的。​​span> 【参考方案1】:
CREATE SCHEMA [MYSCHEMA] AUTHORIZATION [dbo]

CREATE VIEW [VIEW1] AS SELECT [ID], [NAME] FROM [dbo].[TABLE1]
CREATE VIEW [VIEW2] AS SELECT [ID], [NAME] FROM [dbo].[TABLE2]
GO

【讨论】:

我不知道你为什么投了反对票,这行得通。我刚刚在 sql server 2008 r2 上测试了这个 @bluefeet:令人惊讶 - 是的,这似乎工作得很好,而且它似乎确实在新模式中创建了这些视图。你永远不会停止学习:-) 谢谢大家 :) 我在发帖前做了测试。 @marc_s 我也不认为它会起作用,这就是我测试它的原因。 也不知道。 CREATE VIEW 被认为是 CREATE SCHEMA 语句的一部分 CREATE SCHEMA can create a schema, the tables and views it contains, and GRANT, REVOKE, or DENY permissions on any securable in a single statement. This statement must be executed as a separate batch. Objects created by the CREATE SCHEMA statement are created inside the schema that is being created.

以上是关于在架构内创建多个视图 - SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 使用当前 GetDate 筛选器创建架构绑定索引视图

SQL Server里面啥样的视图才能创建索引

sql server 中创建架构,架构是干啥用的,为啥要创建架构,有啥好处?

具有不同所有者的 SQL Server 所有权链跨架构,用于从多个架构中选择视图

SQL Server:基于多个日期创建摘要

四SQL Server数据库创建与删除(使用视图)