日期:2014-05-17  浏览次数:20578 次

求看一下这个视图的问题
本帖最后由 sorryinumb 于 2013-05-21 09:13:23 编辑
alter view [dbo].[ord_shopbestgoodsdoc_v]          
as          
select os.descri,os.OperatorsCategory,*,'URP32' as Source from DB01.dbo.ord_shopbestgoodsdoc a LEFT JOIN oSDOrg os ON a.sdorgid=os.SDOrgID
union          
select os.descri,os.OperatorsCategory,*,'URP32' as Source from DB02.dbo.ord_shopbestgoodsdoc a LEFT JOIN oSDOrg os ON a.sdorgid=os.SDOrgID


这个视图本来是没问题的,现在加了:
LEFT JOIN oSDOrg os ON a.sdorgid=os.SDOrgID
 出现报错:
各视图或函数中的列名必须唯一。在视图或函数 'ord_shopbestgoodsdoc_v' 中多次指定了列名 'SDOrgID'。

现在需要连接oSDOrg  表取出 os.descri,os.OperatorsCategory 两个字段来.该怎么写?

------解决方案--------------------
这个很简单,把视图的列名相同的,用一个别名替代,
比如,视图中有两列,a.id,b.id,那么修改为a.id as id ,b.id as bid
------解决方案--------------------

你先看下你查询的结果,肯定是有两列sdorgid,这是因为你* 没有指定查哪个表的所有列
改成下面的试试:

alter view [dbo].[ord_shopbestgoodsdoc_v]           as          select os.descri,os.OperatorsCategory,a.*,'URP32' as Source from DB01.dbo.ord_shopbestgoodsdoc a LEFT JOIN oSDOrg os ON a.sdorgid=os.SDOrgID union          select os.descri,os.OperatorsCategory,a.*,'URP32' as Source from DB02.dbo.ord_shopbestgoodsdoc a LEFT JOIN oSDOrg os ON a.sdorgid=os.SDOrgID