Параметры в DB.QueryResult

Started by VSS, June 18, 2015, 04:03:37 PM

Previous topic - Next topic

VSS

Всем привет!

Попробовали оптимизировать работу с запросами и добавить параметр как описано в анонсе и документации:
https://www.netxms.org/forum/announcements/netxms-1-2-14-released/msg13923/#msg13923

Но что-то не получилось в логе:

Quote[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] Received message CMD_GET_PARAMETER
[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] Requesting parameter "DB.QueryResult(checksensor(1))"
[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] GetParameterValue(): result is 404 (UNKNOWN_PARAMETER)
[18-Jun-2015 17:50:42.538] [DEBUG] [session:0] Sending message CMD_REQUEST_COMPLETED (size 32)
[18-Jun-2015 17:50:43.569] [DEBUG] [session:0] Message dump:
  ** 000300000000001000000A2D00000000
  ** code=0x0003 (CMD_KEEPALIVE) flags=0x0000 id=2605 size=16 numFields=0

Запрос задан как:

QuoteQuery = checksensor:dbname:check the status of sensor:SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM .... where ... param1

Вызывается как:

QuoteDB.QueryResult(checksensor(1))

Версия 1.2.14. Подскажите, пожалуйста, что может быть не так?

VSS

Коллеги, у кого есть идеи ??? Спасибо!

Victor Kirhenshtein

Попробуйте прописать в конфиге агента как ConfigurableQuery - должен появится новый параметр checksensor к которому можно будет обратится как checksensor(1)

VSS

Quote from: Victor Kirhenshtein on August 06, 2015, 01:19:27 PM
Попробуйте прописать в конфиге агента как ConfigurableQuery - должен появится новый параметр checksensor к которому можно будет обратится как checksensor(1)

Спасибо за подсказку, изменили тип запроса на ConfigurableQuery. Теперь запрос можно вызвать как checksensor(1).

Но каким образом описать ПАРАМЕТР в самом запросе, такой вариант не сработал:

QuoteSELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM .... where ... param1

Т.е. непонятно как в запросе описать сам параметр?

Victor Kirhenshtein

Ставить знак вопроса. Первый параметр подставится в первый знак вопроса, второй во второй, и т.д. Например:

SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM .... WHERE ... condition_column=?

VSS

Quote from: Victor Kirhenshtein on August 18, 2015, 09:21:15 AM
Ставить знак вопроса. Первый параметр подставится в первый знак вопроса, второй во второй, и т.д. Например:

SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM .... WHERE ... condition_column=?

Спасибо за подсказку. Попробовали, но из наблюдений параметр не передается в запрос.

изменили запрос на:
Quote
SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM ... where ... and objid in (?) ORDER BY ...

в Data Collection вызываем его как  checksensor(1)

но в журнале появляется ошибка:
Quote
[ERROR] SQL query failed (Query = "SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM ... where ... and objid in (?) ORDER BY ... "): [Microsoft][SQL Server Native Client 10.0]COUNT field incorrect or syntax error

В конфиги он создается как:

QuoteConfigurableQuery = checksensor:testdb:test query:SELECT STUFF ( (SELECT top 5 ';' + objid + ',' + action + ',' + CONVERT(varchar(10),DATEDIFF(s,'1970-01-01', DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), date))) FROM ... where ... and objid in (?) ORDER BY ....'')

Версия: 1.2.14.

Victor Kirhenshtein

Я советую обновить этот агент до 2.0-M3 или выше, поскольку в 2.0-M3 были исправления в параметризованных запросах.