我有一个数据仓库,里面有很多用 SSMS 视图设计器内置的视图。查看语法,FROM我无法理解这些子句,因为ON语句没有紧跟在相关的JOIN <table>. 通常RIGHT连接查询的主表并在FROM. 所以我有这样的情况:
SELECT *
FROM tableC
LEFT JOIN TableB
RIGHT JOIN TableA
ON TableA.ID = TableB.ID
ON TableB.TypeID = TableC.TypeID
WHERE ....
Run Code Online (Sandbox Code Playgroud)
将各种JOINandON子句的顺序更改为我手写的内容会以意想不到的方式改变结果。似乎大多数 SQL 美化者都对这种丑陋的语法感到窒息,而 SSMS 则不然。我一直无法找到押韵、原因或文档来帮助解开正在发生的事情。
请提供任何建议或链接以找出和修复视图设计器查询?
总而言之,我上周五发生了一件非常奇怪的事情。我们有一个每天更新的表,它使用一个作业来触发一个利用视图的过程。列正在从视图转换到正在更新的表,即视图中的列 A 正在更新表中的列 D,而不是它应该具有的列 A。
当我右键单击视图并从菜单中选择“设计”时,我可以看到问题确实是生成的 sql 语句正在写入以使用视图中 A 列的信息更新表中的 D 列。
我怀疑视图定义发生了变化,所以我右键单击视图并编写脚本以查看它上次更新的时间,当我这样做时,生成的脚本是正确的,并且与我选择“设计”选项时生成的 sql 完全不同. 在这一点上,我删除了视图并从脚本中重新创建了它。现在一切都很好。
有没有人见过这个?自 2000 年以来,我一直在使用 SQL 服务器,但从未遇到过这种情况。我们在 Win2K3 上使用 SQL2005 SP4(即将升级到 12)。任何见解将不胜感激。-保罗
我有两张桌子
[LocatioNo],[LocationName],[Description])[LocationNo],[LocationCode],[DDate],[BillNo],[Model],[Quantity],[SNo])
(来源:staticflickr.com)
](http://www.flickr.com/photos/77377790@N08/6782618850 “点击查看Flickr”)
以及涉及在 SQL Server 2000 中创建的 2 个表的视图
CREATE VIEW [dbo].[QueryLocation]
AS
SELECT TOP (100) PERCENT
dbo.LocationData.LocationNo, dbo.LocationData.LocationCode,
dbo.LocationData.DDate, dbo.LocationData.BillNo,
dbo.LocationData.Model,
SUM(dbo.LocationData.Quantity) AS Quantity,
dbo.LocationMaster.LocationName
FROM
dbo.LocationData
INNER JOIN
dbo.LocationMaster ON dbo.LocationData.LocationNo = dbo.LocationMaster.LocatioNo
GROUP BY
dbo.LocationMaster.LocationName, dbo.LocationData.LocationNo,
dbo.LocationData.LocationCode, dbo.LocationData.DDate, dbo.LocationData.BillNo,
dbo.LocationData.Model ORDER BY dbo.LocationData.BillNo
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 2000 中执行以下查询时,网格中的结果按billno列排序。
SELECT * FROM QueryLocation
Run Code Online (Sandbox Code Playgroud)

(来源:staticflickr.com)
](http://www.flickr.com/photos/77377790@N08/6782618858 “点击查看 Flickr”)
升级到 SQL Server …