【问题标题】:SQL Server creating wrong table names, why?SQL Server 创建错误的表名,为什么?
【发布时间】:2010-02-19 09:20:28
【问题描述】:

问题:当我使用 SQL Server Management-Studio 创建表 (T_TableName) 时,它总是将表创建为

Domain\UserName.T_TableName

而不是

dbo.T_TableName

怎么了?

【问题讨论】:

    标签: sql sql-server ssms


    【解决方案1】:

    如果您没有在要创建的表名上明确指定架构,它将在用户当前的默认架构中创建。

    我敢打赌,您使用的用户将自己的个人架构设置为默认架构 - 这就是您的表在他自己的个人架构中创建的原因。

    您可以通过检查sys.database_principals(SQL Server 2005 及更高版本)来检查您拥有哪些数据库用户以及他们的默认架构是什么:

    SELECT name, type_desc, default_schema_name
    FROM sys.database_principals
    

    解决这个问题:

    • 明确指定要使用的架构(无论如何都是最佳实践!)

      CREATE TABLE dbo.T_TableName
      
    • 将用户的默认架构更改为dbo

      ALTER USER [Domain\YourUser] WITH DEFAULT_SCHEMA = dbo
      

    但作为一般经验法则,我建议始终使用“dbo”。显式前缀,如果您想在 dbo 模式中拥有所有数据库对象。如果您明确告诉它您的数据库对象所在的位置,SQL Server 就不必在不同的架构中寻找,因此也有助于提高性能。

    【讨论】:

      【解决方案2】:

      您需要将您的表创建为“dbo.Whatever”,或者您需要通过发出如下命令来更改您的默认架构(或让您的 SA 为您完成):

      ALTER USER [DOMAINNAME\UserName] WITH DEFAULT_SCHEMA = dbo;
      

      【讨论】:

        【解决方案3】:

        在 SSMS 中将其称为 dbo.T_TableName。如果您拥有正确的权限,它将起作用。

        【讨论】:

          【解决方案4】:

          您是否为创建表的数据库分配了db_owner?如果没有,这可能是问题所在。尝试将您的用户映射权限添加到数据库中。

          USE [yourDatabase]
          GO
          EXEC sp_addrolemember N'db_owner', N'DOMAIN\UserOrGroup'
          GO
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-23
            • 1970-01-01
            相关资源
            最近更新 更多