创建视图错误列名称必须是唯一的

问题描述 投票:0回答:1

嗨,我正在尝试通过创建视图来解决错误。我的观点如下:

CREATE VIEW [dbo].[vw_Employee_Data] AS
SELECT * 
  FROM [dbo].[Employee] as emp
  inner join [dbo].[Managar] as mgr on emp.NewEmp=mgr.EmpID
GO

当我创建此视图时,我收到以下错误:

每个视图或函数中的列名必须是唯一的。视图或函数“vw_Employee_Data”中的列名“EmpID”被多次指定。

所以我读了here关于指定要选择的所有列名的简单解决方案。我检查了this stackoverflow问题,这有点类似。

如果我在“SELECT”中指定每一列,它工作正常,但问题是我的表employee表有超过25列,而Manager表有大约10列,这会使我的查询很长,不确定是否会有任何性能的问题。

但是,当我尝试按如下方式缩短查询时,我得到相同的重复列错误:

CREATE VIEW [dbo].[vw_Employee_Data] AS
SELECT emp.*, [mgr].[EmpID] AS [MGREmpID], [mgr].[BaseLID] AS [MGRBaseLID], mgr.*
  FROM [dbo].[Employee] as emp
  inner join [dbo].[Managar] as mgr on emp.NewEmp=mgr.EmpID

所以我想知道是否有另一种解决方法。我是SQL的新手,所以不确定我是否正确使用tbl。*格式。

任何意见?

sql sql-view create-view
1个回答
2
投票

不要使用*。列出所有列:

CREATE VIEW [dbo].[vw_Employee_Data] AS
    SELECT e.*, m.EmpID AS MGREmpID, m.BaseLID AS MGRBaseLID
    FROM [dbo].Employee e INNER JOIN
         [dbo].Manager m
         ON e.NewEmp = m.EmpID;

如果你有mgr的更多列,那么列出它们并确保它们不与emp列冲突。

© www.soinside.com 2019 - 2024. All rights reserved.