代码之家  ›  专栏  ›  技术社区  ›  Naphstor

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

  •  0
  • Naphstor  · 技术社区  · 7 年前

    嗨,我正在尝试解决创建视图时出现的错误。我的看法如下:

    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新手,所以不确定是否使用 待定。* 格式是否正确。

    有什么意见吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    不使用 * 是的。列出 全部的 列:

    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 柱。

    推荐文章