【发布时间】:2010-10-26 04:04:11
【问题描述】:
在 Sql Server 2008 中,当我创建没有架构前缀的表时:
create table mytable ( id int identify )
它通常以 dbo 模式结束,名称为 dbo.mytable。
但是,在我们的一台服务器上,表格最终属于我:
andomar.mytable
哪种配置差异可以解释这一点?
【问题讨论】:
标签: sql-server schema
在 Sql Server 2008 中,当我创建没有架构前缀的表时:
create table mytable ( id int identify )
它通常以 dbo 模式结束,名称为 dbo.mytable。
但是,在我们的一台服务器上,表格最终属于我:
andomar.mytable
哪种配置差异可以解释这一点?
【问题讨论】:
标签: sql-server schema
如果您没有定义创建表的模式,它将始终使用默认模式。 你可以这样创建它:
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 如果您需要其他帮助或标记答案,您发现它可用 :)
【讨论】:
这取决于您在该数据库中的默认架构。即使在 SQL Server 2005 中,如果您在该数据库中的默认架构是 andomar,那么任何没有显式架构创建的表都将在那里结束。
检查该数据库中的用户属性(不是登录属性)并查看默认架构是什么。
【讨论】: