SQLCMD.EXE を使用してクエリを実行しようとしていますが、LIKE 部分に問題があります。
WHERE email LIKE '%%@%%'
エラーが発生したため、SQLCMD.EXE ではなく cmd プロンプトのエラーだと思います。
Syntax error "@%'"
次のようにbatファイルを指すNotepad ++(NppExec)を介してこれを実行しています:
H:\scripts\SQL.bat "$(CURRENT_WORD)"
これにより、SQLCMD.EXE 呼び出しで使用される前に、クエリが二重引用符で囲まれます。SQLCMD.EXE 呼び出しは、次のようにバット ファイルで実行されます。
SQLCMD.EXE -U user -P %pass% -S %server% -Q %sql% -d %table%
このLIKE '%%@%%'
部分を除いて、私が使用するすべてのクエリで完璧に機能します。
アップデート
%
さらにいくつかのテストを行った結果、との問題に絞り込んだと思います@
。
したがって、次のようなクエリは正常に機能します。
SELECT name FROM table WHERE name LIKE 'test'
SELECT name FROM table WHERE name LIKE 'test%'
SELECT name FROM table WHERE name LIKE '%%test'
しかし、これらはエラーを引き起こします:
SELECT name FROM table WHERE name LIKE '%test'
SELECT name FROM table WHERE name LIKE '%test%'
クエリでを 2 倍に%
しても問題ないので、これで問題ありませんが、試してみる%%@%
と%%@%%
、エラーがスローされます。Syntax error "@'""
またはSyntax error "@%'""
、それぞれ。
また、変数の理由は、テーブル名を検出し、さまざまなサーバーとデータベースに対して実行できるように、いくつかのロジックを含めたことです。
ここにバットファイルがあります
set sql=%1
iff %@index[%sql%,sur_] GT -1 THEN
SET SERVER=server1
SET table=tablename
SET pass=password
else
SET SERVER=server2
SET table=tablename
SET pass=password
endiff
SQLCMD.EXE -U usr -P %pass% -S %server% -Q %sql% -d %table%
奇妙な構文の理由は、コマンドが TCC/LE を介して実行されているためです(こちらを参照)。