代码之家  ›  专栏  ›  技术社区  ›  Andomar

在用户架构中默认创建的表

  •  2
  • Andomar  · 技术社区  · 15 年前

    在SQL Server 2008中,创建不带架构前缀的表时:

    create table mytable ( id int identify )
    

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

    然而,在我们的一个服务器上,这个标签最终属于我:

    andomar.mytable
    

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

    2 回复  |  直到 10 年前
        1
  •  1
  •   DCNYAM    15 年前

    这取决于该数据库中的默认模式。即使在SQLServer2005中,如果该数据库中的默认模式是andomar,那么任何没有显式模式的表都将在那里结束。

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

        2
  •  0
  •   SeniB    10 年前

    如果您不定义在其中创建表的模式,它将始终使用默认模式。 您可以这样创建它:

    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如果需要其他帮助或标记“Answer it you find it usable:”