在Sql Server 2008中,当我创建一个没有架构前缀的表时:
create table mytable ( id int identify )
它通常以模式dbo结尾,名称为dbo.mytable。
但是,在我们的一台服务器上,表格最终属于我:
andomar.mytable
哪种配置差异可以解释这个?
答案 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如果您需要其他帮助或标记答案,您会发现它可用:)