我想在SQL Server CE中的单个查询中执行多个连接。我知道SQL Server CE不支持多个SELECT,但我无法在多个INNER JOIN上找到任何信息。我在ProjectItemMaster
(FROM之后)和第一个INNER JOIN上不断收到令牌错误。警告这是一个用于生成报告的严重丑陋查询。多个INNER JOINs SQL Server精简版
GetCutSheetDataByCustPnumTagQuery
定义为:
SELECT ReportCalculations.ItemNumber, ReportCalculations.PartNumber,
ReportCalculations.calcWidth, ReportCalculations.calcHeight,
ReportCalculations.calcQuantity, ReportCalculations.Description,
ReportCalculations.PrintonCutSheet, ProjectItemMaster.Quantity,
ProjectItemMaster.HingeDirection, ProjectItemMaster.ItemDescription,
ProjectItemMaster.MetalFinish, ProjectItemMaster.Width,
ProjectItemMaster.Height, ProjectItemMaster.CustomerID,
CustomerMaster.CustomerId AS Id_CM, ProjectItemMaster.GlassType,
ProjectItemMaster.Tag AS Expr1, ReportCalculations.Tag,
ProjectItemMaster.ItemNumber AS Expr2, ReportCalculations.CalcX,
ReportCalculations.CalcY, ProjectItemMaster.OpeningWidth,
ProjectItemMaster.ReturnDirection, ProjectItemMaster.PanelDirection,
ProjectItemMaster.ReturnWidth, ProjectItemMaster.ButtressHeight,
ProjectItemMaster.ButtressWidth, ProjectItemMaster.AvailThickness,
ProjectItemMaster.PanelThickness, ProjectItemMaster.Image,
ProjectItemMaster.SoftwareVersion, ProjectItemMaster.DatabaseVersion,
ProdlineMaster.Series, ProdlineMaster.Report, ProjectItemMaster.Addons,
ProjectItemMaster.PanelWidth, CustomerMaster.CustomerName,
ProjectMaster.WO, ProjectMaster.PO, ProdlineMaster.SeriesName,
ReportCalculations.Series AS Expr3
FROM ProjectItemMaster
INNER JOIN CustomerMaster
ON ProjectItemMaster.CustomerID = CustomerMaster.CustomerId
INNER JOIN ReportCalculations
ON ProjectItemMaster.Tag = ReportCalculations.Tag
AND ProjectItemMaster.CustomerID = ReportCalculations.CustomerID
AND ProjectItemMaster.ProjectNumber = ReportCalculations.ProjectNumber
INNER JOIN ProdlineMaster
ON ReportCalculations.Series = ProdlineMaster.Series
INNER JOIN ProjectMaster
ON CustomerMaster.CustomerId = ProjectMaster.CustomerId
AND ProjectItemMaster.ProjectNumber = ProjectMaster.ProjectNumber
WHERE (ReportCalculations.PrintonCutSheet = 'Y')
AND (ProjectItemMaster.ProjectNumber = @ProjectNumber)
AND (CustomerMaster.CustomerId = @CustomerID)
AND (ProjectItemMaster.CustomerID = @CustomerID)
AND (ProjectItemMaster.Tag = @TAG)
这是在执行查询在VB.NET上的SQL数据库压缩功能。
Public Function getCutSheetInfobyCustProdTag(ByRef customerID As String,
ByRef projectNumber As Integer,
ByVal tag As String)
As System.Data.DataTable
Dim mydata As New DataTable
GetCutSheetDataByCustPnumTagQuery.Parameters.Clear()
GetCutSheetDataByCustPnumTagQuery.Parameters.AddWithValue("@ProjectNumber",
projectNumber)
GetCutSheetDataByCustPnumTagQuery.Parameters.AddWithValue("@CustomerID",
customerID)
GetCutSheetDataByCustPnumTagQuery.Parameters.AddWithValue("@TAG", tag)
Try
splConnection.Open()
Dim reader As SqlCeDataReader = GetCutSheetDataByCustPnumTagQuery.ExecuteReader
mydata.Load(reader)
Catch ex As Exception
MessageBox.Show("Problem with reportcalculations table", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error)
' Return False
Finally
splConnection.Close()
End Try
'Return True
Return mydata
End Function
如果我不能使用多个INNER JOIN我可以把查询分解成许多不同的查询,但我不想这样做。所以维护一个SQL Server CE和一个SQL Server版本的程序更容易。
快速浏览,您的发言_looks_很好,虽然我不知道有足够的了解紧凑的判断有关'JOIN's(虽然我可以”不要想象他们会 - 你会禁用RDBMS的大部分原因...)。如果它抱怨'FROM'子句,请尝试删除单个选定的列直到它消失。我还推荐在'JOIN's中放置__一切可能的东西,并且在'WHERE'子句中放入** not **;保存用于限制由FROM引用的表的WHERE子句(或模拟EXCEPTION连接) – 2012-02-21 16:55:10
@ X-Zero重新排列查询后,我不再在FROM标记上得到'SQLCeException'。我现在正在收到'SQLCeException''数据转换失败。 [OLE DB状态值(如果已知)= 0]'。经过一番研究后,问题似乎来自架构不匹配或NULL值。 – Calidus 2012-02-21 17:44:25
你列出的例外感觉有点模糊 - 我会检查你所有的比较列是相同的数据类型。 – 2012-02-21 18:21:46