【问题标题】:Tables created by default in user schema默认在用户架构中创建的表
【发布时间】:2010-10-26 04:04:11
【问题描述】:

在 Sql Server 2008 中,当我创建没有架构前缀的表时:

create table mytable ( id int identify )

它通常以 dbo 模式结束,名称为 dbo.mytable。

但是,在我们的一台服务器上,表格最终属于我:

andomar.mytable

哪种配置差异可以解释这一点?

【问题讨论】:

    标签: sql-server schema


    【解决方案1】:

    如果您没有定义创建表的模式,它将始终使用默认模式。 你可以这样创建它:

    USE DataBaseName -- define database to use
    GO
    BEGIN TRAN - if you will have any error everything will roll back
    CREATE TABLE testovi.razine - schema name is "testovi" and tablename is "razine"
    (
    id INT NOT NULL IDENTITY(1,1),
    razina NVARCHAR(50) NULL,
    razinaENG NVARCHAR(50) NULL,
    kreirao UNIQUEIDENTIFIER NULL,
    VrijemeKreiranja DATETIME NULL
    )
    ON [PRIMARY]
    GO
    

    创建表时,始终在最常用于事务的列上设置约束和索引

    ALTER TABLE testovi.razine ADD CONSTRAINT
    PK_mat_razine PRIMARY KEY CLUSTERED
    (id) WITH(IGNORE_DUP_KEY=OFF,  --check duplicate and don't ignore if try to insert one
    STATISTICS_NORECOMPUTE=OFF,  -- important for statistic update and query optimization
    ALLOW_PAGE_LOCKS=ON) -* I believe that this is default, but always put it to on if not
    ON [PRIMARY]
    GO
    if @@error<>0
    BEGIN
    ROLBACK TRAN
    END
    ELSE
    BEGIN 
    COMMIT TRAN --if everything passed o.k. table will be created
    END
    

    如果您想设置默认架构,您必须知道它是基于用户的默认架构,以便您可以使用代码进行设置:

    USE espabiz -- database;
    ALTER USER YourUserName WITH DERAULT_SCHEMA = SchemaName; -- SchemaName is default schema for defined user
    

    Ping 如果您需要其他帮助或标记答案,您发现它可用 :)

    【讨论】:

      【解决方案2】:

      这取决于您在该数据库中的默认架构。即使在 SQL Server 2005 中,如果您在该数据库中的默认架构是 andomar,那么任何没有显式架构创建的表都将在那里结束。

      检查该数据库中的用户属性(不是登录属性)并查看默认架构是什么。

      【讨论】:

      • 没错,我在登录属性下检查。谢谢!
      猜你喜欢
      • 2017-04-10
      • 2013-02-01
      • 2021-12-01
      • 2015-05-06
      • 1970-01-01
      • 2017-11-29
      • 2012-09-07
      • 2011-09-10
      • 2012-11-03
      相关资源
      最近更新 更多