Всем привет!
Попробовали оптимизировать работу с запросами и добавить параметр как описано в анонсе и документации:
https://www.netxms.org/forum/announcements/netxms-1-2-14-released/msg13923/#msg13923 (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. Подскажите, пожалуйста, что может быть не так?
Коллеги, у кого есть идеи ??? Спасибо!
Попробуйте прописать в конфиге агента как ConfigurableQuery - должен появится новый параметр checksensor к которому можно будет обратится как checksensor(1)
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
Т.е. непонятно как в запросе описать сам параметр?
Ставить знак вопроса. Первый параметр подставится в первый знак вопроса, второй во второй, и т.д. Например:
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 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.
Я советую обновить этот агент до 2.0-M3 или выше, поскольку в 2.0-M3 были исправления в параметризованных запросах.