获取唯一的列名以允许创建视图?

时间:2017-04-02 17:19:35

标签: sql sql-server sql-view

我正在尝试通过连接创建两个表中的视图,我使用的方法但是我仍然收到此错误:

  

Msg 4506,Level 16,State> 1,Procedure vw_Employee,Line 3 [Batch Start Line 19]
  每个视图或函数中的列名必须是唯一的。视图或函数“vw_Employee”中的列名“empNumber”被多次指定。

我的观点如下:

create view vw_Employee as
(
    select * 
    from Employees e1 
    inner join EmpInfo e2 on e2.empNumber = e1.empNumber
)

2 个答案:

答案 0 :(得分:3)

这是因为这两个表都有empNumber列,您正在使用*进行选择。 select中的列名中不应存在任何歧义/冲突。假设唯一的常用列名是empNumber。

create view vw_Employee as
(
select * from Employees e1 inner join EmpInfo e2 
using (empNumber)
)

我建议您明确列出您需要的所有列名称。

create view vw_Employee as
(
select e1.empNumber, . . .
from Employees e1 inner join EmpInfo e2 
on e2.empNumber = e1.empNumber
)

编辑:

根据您的评论,尝试:

create view vw_Employee
as
(
        select e1.empNumber,
            e1.firstName,
            e1.lastName,
            e1.ssn,
            e1.job,
            e1.projectId,
            e2.[address],
            e2.[state],
            e2.zip,
        from Employees e1
        inner join EmpInfo e2 on e2.empNumber = e1.empNumber
        )

答案 1 :(得分:1)

您必须在select query中写入列名,并且只能使用e1.empNumber