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

时间:2009-05-14 12:26:23

标签: sql-server schema

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

create table mytable ( id int identify )

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

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

andomar.mytable

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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如果您需要其他帮助或标记答案,您会发现它可用:)