2012-02-23 109 views
-1

我查詢不運行,但不返回任何結果:的MS Access/SQL Server的傳遞查詢

SET NoCount ON 

SELECT 
    Inventory.EffectiveDate, 
    Inventory.Quantity, 
    Inventory.SourceType, 
    Inventory.PickingLocation, 
    Inventory.SourceInventory, 
    Locations.LocationId, 
    Customers.CustomerName, 
    Products.ProductId, 
    LocationFrom.LocationId as lFrom, 
    LocationTo.LocationId as lTo 

FROM (((((((dbo.Inventory AS Inventory 

    LEFT JOIN dbo.Products AS Products ON Products.Product = Inventory.Product) 
    LEFT JOIN dbo.Locations AS Locations ON Locations.Location = Inventory.Location) 
    LEFT JOIN dbo.Customers AS Customers ON Customers.ConsignmentLocation = Inventory.Location) 

    LEFT JOIN dbo.Inventory AS SourceLocation ON SourceLocation.Inventory = Inventory.SourceInventory) 
    LEFT JOIN dbo.Locations AS LocationFrom ON LocationFrom.Location = SourceLocation.Location) 

    LEFT JOIN dbo.Inventory AS TargetLocation ON TargetLocation.Inventory = Inventory.TargetInventory) 
    LEFT JOIN dbo.Locations AS LocationTo ON LocationTo.Location = TargetLocation.Location) 

WHERE 
    (Inventory.SourceType = 'Q' OR Inventory.SourceType = 'G' OR Inventory.SourceType = 'P' OR Inventory.SourceType = 'A' OR Inventory.SourceType = 'B') 
    AND 
    ((Inventory.EffectiveDate >= 2011-12-30 And Inventory.EffectiveDate <= 2011-12-31)); 

該查詢從Excel罰款運行。但我一直在尋找能夠查看錶格的工具,這就是爲什麼我使用Access的原因 - 但它給了我更多的問題......

回答

1

您需要用單引號括住日期參數。

Inventory.EffectiveDate >= '2011-12-30' 

您還應該考慮使用較短的別名來使代碼更加簡潔。我不確定使用像Products這樣的別名來代表dbo.Products ......您還應該消除所有不必要的括號,如果Access不強制他們在您身上。

SET NOCOUNT ON; 

SELECT 
    inv.EffectiveDate, 
    inv.Quantity, 
    inv.SourceType, 
    inv.PickingLocation, 
    inv.SourceInventory, 
    loc.LocationId, 
    cust.CustomerName, 
    prod.ProductId, 
    lFrom.LocationId as lFrom, 
    lTo.LocationId as lTo 
FROM dbo.Inventory AS inv 
LEFT OUTER JOIN dbo.Products AS prod ON prod.Product = inv.Product 
LEFT OUTER JOIN dbo.Locations AS loc ON loc.Location = inv.Location 
LEFT OUTER JOIN dbo.Customers AS cust ON inv.Location = cust.ConsignmentLocation 
LEFT OUTER JOIN dbo.Inventory AS src ON src.Inventory = inv.SourceInventory 
LEFT OUTER JOIN dbo.Locations AS lFrom ON lFrom.Location = src.Location 
LEFT OUTER JOIN dbo.Inventory AS trg ON trg.Inventory = inv.TargetInventory 
LEFT OUTER JOIN dbo.Locations AS lTo ON lTo.Location = trg.Location 
WHERE 
    inv.SourceType IN ('Q', 'G', 'P', 'A', 'B') 
    AND inv.EffectiveDate >= '2011-12-30' 
    AND inv.EffectiveDate <= '2011-12-31'; -- suspect you want < '2012-01-01' here 
    -- unless your column doesn't store time. 
+0

它實際上是相反的。如果我把它們放在引號中,我得到這個錯誤:'char數據類型轉換爲smalldaretime導致超出範圍值' – Elen 2012-02-23 17:38:58

+0

'Inventory.EffectiveDate'的數據類型是什麼?如果您使用'YYYYMMDD'而不是'YYYY-MM-DD',會怎麼樣? – 2012-02-23 17:48:51

+0

你引導我走向正確的方向!顯然它應該看起來像'30/12/11''謝謝你! – Elen 2012-02-23 17:56:46