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

时间:2018-07-17 17:11:39

标签: sql sql-view create-view

您好,我正在尝试通过创建视图来解决错误。我的看法如下:

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。* 格式。

有任何评论吗?

1 个答案:

答案 0 :(得分: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列不冲突。