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

Sql 获取唯一列名以允许创建视图?,sql,sql-server,sql-view,Sql,Sql Server,Sql View,我目前正在尝试通过执行联接从两个表创建视图,我在这里使用了一些方法,但仍然遇到以下错误: Msg 4506,16级,状态>1,程序vw_员工,第3行[批次起始第19行] 每个视图或函数中的列名必须是唯一的。多次指定视图或函数“vw_Employee”中的列名“empNumber” 我的看法如下: create view vw_Employee as ( select * from Employees e1 inner join EmpInfo e2 on e2.emp

我目前正在尝试通过执行联接从两个表创建视图,我在这里使用了一些方法,但仍然遇到以下错误:

Msg 4506,16级,状态>1,程序vw_员工,第3行[批次起始第19行] 每个视图或函数中的列名必须是唯一的。多次指定视图或函数“vw_Employee”中的列名“empNumber”

我的看法如下:

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

这是因为这两个表都有EMPNAME列,您使用*进行选择。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
        )

这是因为这两个表都有EMPNAME列,您使用*进行选择。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
        )

您必须在select查询中写入列名,并仅取e1.EMPNAME

您必须在select查询中写入列名,并仅取e1.EMPNAME

创建视图vw_Employee作为select e1.EMPNAME、e1.firstName、e1.lastName、e1.ssn、e1.job、e1.projectId、e2.[address],e2.[state],e2.zip,e2.EMPNAME来自员工e1内部加入e2.EMPNAME=e1.EMPNAME@Danny上的EmpInfo e2-现在查看我答案中的编辑。完美,按预期工作。因此,当连接两个表以创建视图时,我不必从第二个表中声明列,因为我已经从第一个表中选择了它。@Danny-是。创建视图vw_Employee作为select e1.empNumber,e1.firstName,e1.lastName,e1.ssn,e1.job,e1.projectd,e2.[address],e2.[state],e2.zip,e2.empNumber from Employees e1 internal join EmpInfo on e2.empNumber=e1.empNumber@Danny-现在查看我答案中的编辑。完美,按预期工作。因此,当连接两个表以创建视图时,我不必从第二个表中声明列,因为我已经从第一个表中选择了它。@Danny-是。确切地