Ram*_*ale 11 sql-server-2008 sql-server sql-server-2000
我将一堆表从 SQL Server 2000 导入到我的 2008 数据库中。所有导入的表都以我的用户名作为前缀,例如:erpadmin.tablename
。
在表属性中,它列出了 'erpadmin' 作为 db 架构。当我编写查询时,我现在必须包含“erpadmin”。在所有令人困惑的表名前面。
当前结果:
select *
from erpadmin.tablename
Run Code Online (Sandbox Code Playgroud)
想要的结果:
select *
from tablename
Run Code Online (Sandbox Code Playgroud)
Ada*_*ger 23
如果您想像在 SQL Server 2000 中一样重新使用 dbo 架构,您可以将表移回 dbo 架构:
ALTER SCHEMA dbo TRANSFER erpadmin.tablename;
Run Code Online (Sandbox Code Playgroud)
如果您喜欢非 dbo 架构,另一种方法是将用户的默认架构设置为,erpadmin
然后如果您未指定架构,它将使用该架构作为默认架构。(sysadmin 固定服务器角色的成员在默认情况下忽略DEFAULT_SCHEMA
并使用dbo
。)
ALTER USER erpadmin WITH DEFAULT_SCHEMA = erpadmin;
Run Code Online (Sandbox Code Playgroud)
您拥有的两部分名称 (schema.table) 是一个很好的习惯,因此您可以明确指出您所指的是哪个表。某些功能要求您使用由两部分组成的名称,索引视图就是一个示例。
Tho*_*ger 17
这是为什么在访问数据库对象时应该指定模式名称的经典案例。当它未指定并且您尝试访问非默认模式中的对象时,您将遇到您现在看到的问题。
真正的解决方法是将您的应用程序(或您现在拥有的任何导致问题的查询代理)更改为明确的。
当我编写查询时,我现在必须包含“erpadmin”。在所有令人困惑的表名前面。
这并不令人困惑,这是一个明确的命名约定。我建议您坚持使用该命名法以避免对象改组和不一致。
作为@AdamWenger 回答的补充。要创建用于传输到另一个架构的脚本,您可以使用以下脚本
select 'ALTER SCHEMA dbo TRANSFER '+s.name+'.'+t.name
from sys.schemas s
join sys.tables t on t.schema_id=s.schema_id
where s.name='erpadmin'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
64773 次 |
最近记录: |