Сквозной запрос MS Access / SQL Server - PullRequest
0 голосов
/ 23 февраля 2012

Мой запрос выполняется, но не возвращает результатов:

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 Ответ

1 голос
/ 23 февраля 2012

Вам необходимо заключить параметры даты в одинарные кавычки.

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.
...