2017-07-31 283 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) 
相关问题