Передача параметра в Progress через открытый запрос с сервера SQL - ошибка Недопустимая строка даты - PullRequest
0 голосов
/ 11 марта 2020

Я использую SQL Server 2014 и использую OpenQuery для извлечения данных из базы данных Progress.

Это мой запрос:

    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''
 */

Однако я продолжаю получать ошибка:

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

Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

База знаний Progress 000034986 иллюстрирует, как форматировать дату, это первый хит, если вы зашли на Google:

site:progress.com sql92 date

Поскольку я предпочитаю даты ISO, а не другие, предполагаю формат дата, тогда это становится:

select top 50 t1."trn-val" as "Amount"
from myTable t1 
where t1."trn-dte" >= { d 'yyyy-mm-dd' }

Я не уверен, что ваш @sodate уже в этом формате или вам нужно дополнительное преобразование вокруг вашего дополнения:

select @SOMONTH = convert( varchar, dateadd( day, 1, eomonth( getdate(), -1 ) ), 23 );
0 голосов
/ 11 марта 2020

Работает:

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