如何创建此查询的视图任何人都可以帮助我,我想创建此视图,但它显示我错误
Msg 4506,Level 16,State 1,Procedure ordersview,Line 3 Column names 在每个视图或函数中必须是唯一的。栏目名称' ID'在视野中 功能' ordersview'被指定不止一次。
CREATE VIEW ordersview
AS
Select * from UserClaimData cd
Inner join UserClaimDeductions ud on
ud.CLAIMID = cd.ID
Inner join UserClaimApproval ua on
ua.CLAIMID = cd.ID
inner join ClaimDataBreakdown cb on
cb.CLAIMID = cd.ID
inner join AppExpenseTypes ae on
ae.ID = cb.EXPENSETYPE
inner join AppNOWTypes an on
ae.ID = an.EXPENSETYPEID
inner join AppAreas aa on
aa.ID = cb.AREAID
inner join AppZones az on
cb.ZONEID = az.ID
inner join AppRegions ar on
ar.ID = cb.REGIONID
答案 0 :(得分:1)
您提出的问题的答案是专门引用每个表格中的元素;例如:
CREATE VIEW ordersview
AS
Select cd.ID AS ID1, ua.ID as ID2, etc... from UserClaimData cd
Inner join UserClaimDeductions ud on
ud.CLAIMID = cd.ID
Inner join UserClaimApproval ua on
ua.CLAIMID = cd.ID
inner join ClaimDataBreakdown cb on
cb.CLAIMID = cd.ID
inner join AppExpenseTypes ae on
ae.ID = cb.EXPENSETYPE
inner join AppNOWTypes an on
ae.ID = an.EXPENSETYPEID
inner join AppAreas aa on
aa.ID = cb.AREAID
inner join AppZones az on
cb.ZONEID = az.ID
inner join AppRegions ar on
ar.ID = cb.REGIONID
但是,我建议你不要在视图中放置这么复杂的连接。考虑所需的列,并考虑存储过程或表值函数。
答案 1 :(得分:0)
您不理解错误消息的哪一部分?
您有select *
,它汇集了所有表格中的所有列。仅基于join
条件,很明显大多数表都有ID
列,因此有多个列名为ID
。 CLAIMID
似乎也很受欢迎。
一般情况下,不鼓励使用select *
。但是,它不应该用于视图。视图应说明它包含的列:
select cd.Id, . . .
答案 2 :(得分:0)
视图就像一个虚拟表,因此您不能为2(或更多)列提供相同的名称。
因此,为了避免这种情况,在您的选择查询而不是*提供列名称,如果有2列具有相同的名称,并且您在视图中都需要它们,请为它们指定不同的别名。
假设您在TableA和TableB中有ColumnA,并且您希望它们都在视图中。创建这样的视图
CREATE VIEW vm_Sample
SELECT
A.COLUMNA COLUMNA_1,
B.COLUMNA COLUMNA_2
FROM TABLEA A INNER JOIN TABLE B
ON A.ID = B.ID
答案 3 :(得分:0)
您的视图有多个具有相同名称的列,这导致错误。
AppRegions
有一列名为ID
AppAreas
有一列名为ID
UserClaimData
有一列名为ID
更改Select *
以指定要在View表上使用的表的列,并添加特定名称,或者不要放置它们。
您需要更改视图中某些列的名称。使用AppAreas.ID as aaID