Search code examples
sql-servert-sqldateopenqueryprogress-db

Passing Parameter to Progress via Open Query from SQL Server - error Invalid date string


I'm using SQL Server 2014 and am using an OpenQuery to retrieve data from a Progress Database.

This is my query:

    DECLARE @SOMONTH DATE;
    SELECT @SOMONTH = DATEADD(DAY,1,EOMONTH(GETDATE (),-1));

    SELECT t2.[Amount]
    FROM OPENQUERY(MyServer, 
            ' select top 50 
            t1."trn-val" as "Amount"
      from myTable t1
  WHERE t1."trn-dte" >= '''''' + @SOMONTH + ''''''

 ') AS t2


/*
  Previous attempts -
 WHERE t1."trn-dte" >= '''''' + CONVERT(VARCHAR(10),@SOMONTH,103) + '''''' 
 WHERE t1."trn-dte" >= ' + '''''' + CONVERT(VARCHAR(10),@SOMONTH,103) + '''''' + ' 
 WHERE t1."trn-dte" >= '''''' + @SOMONTH + ''''''
 WHERE t1."trn-dte" >= ' + '''''' + @SOMONTH + '''''' + ' 
 WHERE t1."trn-dte" >= ''DATE(@SOMONTH)''
 WHERE t1."trn-dte" >= TO_DATE(''@SOMONTH'')
 WHERE t1."trn-dte" >= TO_DATE(''@SOMONTH'',''DD/MM/YYYY'')
 WHERE t1."trn-dte" >= ''@SOMONTH''
 */

However, I keep receiving the error:

[DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Invalid date string (7497).

What am I missing?


Solution

  • Got it working:

    DECLARE @TSQL varchar(8000)
    
    declare @SOMONTH date
    
    set @SOMONTH = DATEADD(DAY,1,EOMONTH(GETDATE (),-1));
    
    DECLARE @Date nvarchar(10)=convert(nvarchar(10),@SOMONTH,23)
    
    SELECT  @TSQL = 'SELECT top 50 * FROM OPENQUERY([myserver], ''SELECT * FROM mytable
    WHERE "trn-dte" >= ''''' + @Date + ''''''')'
    EXEC (@TSQL)