2017-07-31 162 views
0

我越來越空白數據,同時運行的查詢,如果我只用兩個'把手動日期準則,則數據是正確的OPENQUERY開始和結束日期SQL

DECLARE @strdate date,@endate date 
set @strdate = '2017-06-24' 
SEt @endate = '2017-06-26' 
SELECT * 
     FROM Openquery(E2E,'Select 
     Order_Created_at, 
     Order_Number 
     ,Shipping_Postcode 
     ,Payment_Method 
     ,Order_item 
     ,Item_sku 
     ,Item_Unit_Price 
     from sales_order_export_summary Where Date(Order_Created_at) >= '''' + @strdate + '''' AND Date(Order_Created_at) <= ''''[email protected] + ''''') 

回答

1

,您需要將日期轉換爲字符串優先採用ISO格式連接前

Where Date(Order_Created_at) >= ''' + convert(varchar(10), @strdate, 112) + ''' AND 
0

如果要在OPENQUERY中使用變量,則必須使用動態SQL。我已將變量@strdate@enddate更改爲varchar(10),因爲我無法連接字符串。

DECLARE @strdate varchar(10),@endate varchar(10) 
SET @strdate = '2017-06-24' 
SET @endate = '2017-06-26' 
DECLARE @SQL varchar(MAX) = ' 
SELECT * 
     FROM Openquery(E2E,''Select 
     Order_Created_at, 
     Order_Number 
     ,Shipping_Postcode 
     ,Payment_Method 
     ,Order_item 
     ,Item_sku 
     ,Item_Unit_Price 
     from sales_order_export_summary Where Date(Order_Created_at) >= ''''' + @strdate + ''''' AND Date(Order_Created_at) <= '''''[email protected] + ''''''')' 
EXEC (@SQL)  

Documentation對於OPENQUERY

+0

謝謝@Rokuto它工作 –

0

其他答案用格式解釋了這個問題。這是另一種簡單的方法,但可能效率不高

DECLARE @strdate date,@endate date 
set @strdate = '2017-06-24' 
SEt @endate = '2017-06-26' 
SELECT * 
FROM Openquery(E2E, 'Select 
     Order_Created_at, 
     Order_Number 
     ,Shipping_Postcode 
     ,Payment_Method 
     ,Order_item 
     ,Item_sku 
     ,Item_Unit_Price 
     from sales_order_export_summary') 
WHERE Order_Created_at >= @strdate 
     AND Order_Created_at < Dateadd(dd, 1, @endate) 
相關問題