【发布时间】:2015-02-22 19:04:37
【问题描述】:
我有 3 个表,分别称为 Airlines、Destinations 和 PriceTable。
Airlines 表有两列 - Airline_ICAO_Code 和 Airline。 Destinations 表有两列 - Airport_ICAO_Code 和 Destination。 PriceTable 有这些列 - ID、Airport_ICAO_Code、Airline_ICAO_Code、Departure、Price 和 RouteStaus。
PriceTable 中的 PK 是 ID。Airlines 表中的 PK 是 Airline_ICAO_Code。 Destinations 表中的 PK 是 Airport_ICAO_Code。价格表中的 Airport_ICAO_Code 和 Airline_ICAO_Code 列是 FK。
我创建了一个名为 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 的视图,它显示了航空公司和目的地的名称。这使得输入正确路线的价格变得容易。 View 的问题是 Airline 列没有排序。属于航空公司的记录分散在整个表格中。这可能会导致我错过一些需要更新的路线。
- 因此,我创建了一个 select 语句,按 Airline A-Z 排序视图。
- 我现在遇到的问题是我无法使用此视图更新 PriceTable(select 语句的结果),因为它不允许我编辑它。我尝试使用 GUI 直接单击它来进行编辑。
我希望这很清楚。
【问题讨论】:
-
不更新视图中的记录;一个更新表中的记录。你能澄清你想做什么吗?样本数据和期望的结果是最有帮助的。
-
你的更新代码在哪里?
-
order by 仅对查看数据很重要,您的更新语句应该具有更具体的更新行的逻辑。如果您的视图不允许您更新记录,请检查使用视图更新的限制,如果它影响多个基础表,则不能发出更新语句。
-
至少发布
view。如果视图具有group by,则无法更新视图 -
我编辑了上面的问题。我尝试使用 SSMS 直接在 select 语句返回的视图中编辑行。我正在使用视图来更新基础表。
标签: sql sql-server ssms