MSSQL by ODBCテンプレートで変数を使ったクエリが動かない件
お世話になっております。
環境は以下の通りです。
Rocky Linux 9.4 + Zabbix 7.0.10
Microsoft® SQL Server® 2022 Express
Get databaseアイテムは正常に動作しているので、ODBC接続によるSQL発行自体は問題ないと考えます。
例えば Get performance counters アイテムですが、私の環境ではZabbixから習得すると [] が返ります。
同じsqlをZabbixのターミナルのisqlから実行すると値が取れます。
テンプレートのSQL冒頭に以下の様なパートがあります。
DECLARE @SQLNAME NVARCHAR(22)
SET @SQLNAME = CASE WHEN @@SERVICENAME = 'MSSQLSERVER' THEN 'SQLServer' ELSE 'MSSQL$' + @@SERVICENAME END
1. 変数 @SQLNAME 定義
2. インスタンス名 @@SERVICENAME を取ってきて、MSSQLSERVER なら@SQLNAMEを SQLServer にする。 それ以外の場合は MSSQL$<インスタンス名> にする
ここで作られた @SQLNAME がSQLの続くSELECT文で使われています。
この最初の部分が動作しているか、デバッグ用のアイテムを作ってテストボタンからデバッグを行いました。
1. @@SERVICENAME が習得出来ているか
SELECT @@SERVICENAME AS service_name;
↓
SQLEXPRESS が習得出来る
2. @SQLNAMEに代入された値を確認
DECLARE @SQLNAME NVARCHAR(22);
SET @SQLNAME = CASE WHEN @@SERVICENAME = 'MSSQLSERVER'
THEN 'SQLServer'
ELSE 'MSSQL$' + @@SERVICENAME END;
SELECT @SQLNAME AS sqlname;
↓
Zabbixからは [] が返る isqlからは MSSQL$SQLEXPRESS が返る
テンプレートのSQL内の変数部分を MSSQL$SQLEXPRESS に置き換えるとデータは取れました。
この事からSQL冒頭の DECLARE とSET 部分がZabbixから実行された場合に正しく動いていない可能性が高まりました。
この件について知見のある方アドバイス頂けると助かります。
よろしくお願いします。