-- 对于 SQL Server 2000,表所属的架构与所有者是一致的,更改表的所有者即可
成都创新互联专业为企业提供鸡泽网站建设、鸡泽做网站、鸡泽网站设计、鸡泽网站制作等企业网站建设、网页设计与制作、鸡泽企业网站模板建站服务,10余年鸡泽做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
exec sp_changeobjectowner 'Tianqi.[OrdersTable]', 'dbo'
-- 对于 SQL Server 2005,表所属的架构与所有者是分离的,需要将表移动到指定架构下
ALTER SCHEMA dbo TRANSFER [Tianqi].[OrdersTable];
-- 为了管理方便,修改表的所有者
ALTER AUTHORIZATION ON object::[Tianqi].[Tianqi].[OrdersTable] TO SCHEMA OWNER;
dbo 和Person都是架构名,默认的架构都是以dbo 开头的 一般我们在调用数据库
数据库名.构架名.表名,这种方式在不同的数据库。
当在同一个数据库中时就可以省略数据库名,只需要构架名.表名,这是在表中只有相同的架构的情况下,只需要直接用表名就可以了select * from 表 ,如果存在架构有多种的话就需要在调用中用 构架名.表名 select * from 架构名.表。
他们起到识别功能,比方说表名相同都叫 a,但是一个是dbo 架构的,一个是 Person,在调用过程中是不一样的,select * from dbo.表
select * from person.表 不写架构名则默认为dbo。
写的好辛苦,不知道你懂了吗?
如果仅仅是 为了 指向一个 外部数据库, 使用 数据库 同义词, 来作这个事情就好了.
下面的例子,就是 Test2 数据库, 要访问 Test 数据库的一个表
默认的情况下,要 全名 Test.dbo.v_sale_report_sum
建立 同义词, 可以简化处理。
如果一定要按照楼主的那种处理方式, 那就只有用 动态SQL 来处理了。
1
2 USE [Test2]
3 GO
已将数据库上下文更改为 'Test2'。
1 SELECT * FROM Test.dbo.v_sale_report_sum;
2 go
sale_item sale_money
--------- ----------------------------------------
A 733285.00
C 5738.00
B 2382.00
(3 行受影响)
1 SELECT * FROM v_sale_report_sum;
2 go
消息 208,级别 16,状态 1,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
对象名 'v_sale_report_sum' 无效。
1 CREATE SYNONYM v_sale_report_sum
2 FOR Test.dbo.v_sale_report_sum;
3 go
1 SELECT * FROM v_sale_report_sum;
2 go
sale_item sale_money
--------- ----------------------------------------
A 733285.00
C 5738.00
B 2382.00
(3 行受影响)
[DATABASENAME].[SCHEMANAME].[表/过程/函数/视图...]
所以
select [DB1.new].dbo.getDeptNameByName('')
是正确的。
不跨DataBase就没必要加完整前缀,
直接select dbo.getDeptNameByName('')