Sql 如何使用此视图更新表

Sql 如何使用此视图更新表,sql,sql-server,ssms,Sql,Sql Server,Ssms,我有三张表,分别是航空公司、目的地和价格表 航空公司表有两列-航空公司代码和国际民航组织代码。目的地表有两列-机场代码和目的地。价格表有以下列-ID、机场代码、航空公司代码、离港、价格和航线 价格表中的PK为ID。航空公司表中的PK为航空公司代码。目的地表中的PK为机场\国际民航组织\代码。价格表中的Airport_ICAO_Code和Airline_ICAO_Code列为FKs 我创建了一个名为InputFlightPrices的视图,用于更新存储航班价格的PriceTable。我之所以使用这

我有三张表,分别是航空公司、目的地和价格表

航空公司表有两列-航空公司代码和国际民航组织代码。目的地表有两列-机场代码和目的地。价格表有以下列-ID、机场代码、航空公司代码、离港、价格和航线

价格表中的PK为ID。航空公司表中的PK为航空公司代码。目的地表中的PK为机场\国际民航组织\代码。价格表中的Airport_ICAO_Code和Airline_ICAO_Code列为FKs

我创建了一个名为InputFlightPrices的视图,用于更新存储航班价格的PriceTable。我之所以使用这个视图,是因为它可以让我清楚地看到哪些航线需要更新,因为很难从代码中确定航空公司和目的地

这是视图代码:

Create View InputFlightPrices
As
Select ID,Airline,Destination,AirportName,Price,Departure,RouteStatus
From Airlines As a
    Join PriceTable As p
On  a.Airline_ICAO_Code = p.Airline_ICAO_Code
    Join Destinations As d
    On  d.Airport_ICAO_Code = p.Airport_ICAO_Code;
我希望视图显示所有航空公司a-z,但我不能在视图中使用Order By子句

因此,我在视图上运行了下面的查询,以便在视图A-Z中订购航空公司

Select * from InputFlightPrices
Order By Airline Asc
上述语句的结果视图显示正确,但不允许我编辑其中的记录以更新表。

有解决办法吗

谢谢你的帮助

我编辑这篇文章是为了回应Philpxy,试图澄清我想要什么:

  • 我想更新一个名为PriceTable的表,其中包含航班价格
  • PriceTable中的Airline和Destination列包含代码。很难从这些代码中知道要更新的航空公司和目的地,因此我创建了一个名为InputFlightPrices的视图,其中显示了航空公司和目的地的名称。这使得输入正确路线的价格变得容易。 视图的问题是航空公司列没有排序。属于航空公司的记录散布在表格中。这可能会导致我错过一些需要更新的路线
  • 因此,我创建了一个select语句,它按航空公司a-Z对视图进行排序
  • 我现在遇到的问题是,我无法使用此视图(select语句的结果)更新PriceTable,因为它不允许我对其进行编辑。我尝试通过使用GUI直接单击来进行编辑 我希望这是清楚的

    由于视图中有多个联接,更新可能无法正确更新记录。您可以在这里使用触发器来更新表


    您可以编辑您的
    Select*从InputFlightPrices Order By Airline Asc
    query per answers to:

    在Mgmt Studio中,编辑前200名时,可以查看SQL 窗格-右键单击网格并选择窗格->SQL或 按左上角的按钮。这将允许您编写自定义 查询以深入到要编辑的行

    转到工具>选项。在左侧的树中,选择SQL Server 对象资源管理器。将选项“编辑顶行命令的值”设置为 0现在,您可以从上下文菜单查看和编辑整个表

    查询结果涉及视图时重新更新:

    来自SQL Server 2014

    视图定义中的SELECT子句不能包括以下内容:

    • ORDERBY子句,除非select语句的select列表中还有TOP子句

      ORDER BY子句仅用于确定视图定义中TOP或OFFSET子句返回的行。命令 BY子句不保证在查询视图时得到有序的结果, 除非在查询本身中也指定了ORDER BY

    [……]

    可以通过视图修改基础基表的数据,如下所示: 只要以下条件成立:

    • 任何修改,包括UPDATE、INSERT和DELETE语句,都必须只引用一个基表中的列
    [……]

    一般来说 数据库引擎必须能够明确地跟踪来自数据库的修改 将视图定义添加到一个基表

    根据最后一句话:如果要为特定行更新基表,则它必须仅为一个基表的列,来自该基表的某些键的列必须在视图中(UNIQUE NOT NULL或PRIMARY key),并且不能更新这些列

    否则,当您要求更新视图中的某一行时,不清楚要更新的基表中的哪一行


    另请参见SQL Server 2014。

    视图中不更新记录;更新表中的记录。你能说明你想做什么吗?示例数据和所需结果最有帮助。更新代码在哪里?order by仅对查看数据很重要,update语句应该具有更具体的逻辑来更新行。如果您的视图不允许您更新记录,请检查使用视图进行更新的限制。如果update语句影响多个基础表,则您不能发出update语句。至少发布
    视图
    。如果视图有
    group by
    I编辑了上面的Qs,则无法更新视图。我尝试使用SSMS直接编辑select语句返回的视图中的行。我正在使用视图更新基础表。我有多个联接,但唯一要更新的列来自PriceTable,因此应该可以。我将仅从视图中的1个表(PriceTable)更新2列。他们是离开和价格阅读对你的问题的评论,并把信息放在你的问题中。这里你没有提到钥匙,但我的回答是它们很重要。如果您不提供目前为止帮助告诉您的信息,您希望如何获得更多帮助?关于“Mgmt Studio,当您编辑前200名时,您可以通过右键单击网格并选择pane->SQL或左上角的按钮查看SQL窗格。”这仅适用于使用单个表的情况,也就是说,没有