【问题标题】:How can I remove the dbo prefix from my table names when I write my sql statements in SQL Server?在 SQL Server 中编写 sql 语句时,如何从表名中删除 dbo 前缀?
【发布时间】:2010-10-20 15:41:52
【问题描述】:

我的架构中的所有表都有一个 dbo 前缀。现在在我的 sql 语句中,我不喜欢一直使用 dbo.tablename。是否有任何变通方法或配置更改?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    其实你应该离开那些 dbo。语句,因为您的 SQL 会更快,因为优化器不必查找架构

    也可以查看此链接Performance Impact of Procedure Calls without Owner Qualification

    【讨论】:

    • 但这是否意味着如果我必须更改架构,我的所有 SQL 脚本都会中断?这些天来,优化器肯定足够聪明,可以猜测我正在引用我可能引用的唯一架构......?
    【解决方案2】:

    离开dbo实际上是有益的。前缀到位 - 毕竟,在 SQL Server 中,您可以有多个具有相同表名的模式(“dbo.”thingie),例如dbo.MyTable、joe.MyTable、frank.MyTable。

    如果您随后从 MyTable 发出 SELECT(字段列表),SQL Server 必须首先确定您真正指的是哪个“MyTable”表 --> 这需要时间,立即指定您想要的“dbo” .MyTable”将为您节省时间。

    好的,单个查询不是很多 - 但 SELECT 查询非常频繁,而且所有这些都加起来!

    马克

    【讨论】:

      【解决方案3】:

      赏金问题并不是原来的问题。

      当前的答案没有包含足够的细节。

      没有一个答案真正解决了如何删除 dbo 前缀或将其更改为其他内容。

      dbo 是架构。您不能从表中删除架构。你可以改变它。有很多例子。这是一个:How do I move a table into a schema in T-SQL

      【讨论】:

        【解决方案4】:

        就像这样,如果你的所有表都在 dbo 模式中

        use mydatabase
        go
        select * from mytable
        

        如果你有多个数据库,你也可以这样做:

        select * from mydatabase..mytable
        

        【讨论】:

          【解决方案5】:

          不幸的是,如果您想充分利用 Microsoft SQL Server,您需要将dbo. 放在许多地方。创建视图时,您可以选择使其成为 schema-bound 视图,这意味着将在编译时检查对象名称,并且只要视图存在,它引用的对象就不能被删除. (您必须先显式删除视图。)如果视图是模式绑定的,它也可以成为索引视图。较新的 MSSQL 版本还支持模式绑定存储过程,这具有其他优势。

          如果您愿意,您可以创建除 dbo 之外的其他模式。但是您仍然需要明确引用对象,例如 myschema.mytable 而不仅仅是 mytable

          对于用户定义的函数,您还需要 dbo.

          就个人而言,我想告诉 MSSQL 我不打算使用模式,我对表的单个顶级命名空间(至少在给定数据库中)的经典 SQL 方式非常满意,并且可以如果没有另外指定,请假设dbo.。但是我还没有找到方法。

          【讨论】:

            【解决方案6】:

            我认为您连接的用户必须属于 dbo 模式,然后您不必键入前缀,它会从用户所属的模式中推断出来。

            【讨论】:

            • 在 SQL 2005 及以上版本中,同一个用户可以访问多个模式。然后呢?
            猜你喜欢
            • 2014-10-29
            • 1970-01-01
            • 2012-12-22
            • 2017-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-16
            • 1970-01-01
            相关资源
            最近更新 更多