我想在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