4

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 を介して実行されているためです(こちらを参照)。

4

2 に答える 2

0

sqlcmd でクエリを実行すると、%シンボルが削除されることがわかりました。あなたのクエリが次のとおりだとしましょう:

SELECT name FROM table WHERE name LIKE 'test%'

sqlcmd はクエリを次のように読み取ります。

SELECT name FROM table WHERE name LIKE 'test'

したがって、sqlcmd は結果をフィルター処理しません。%%お問合せにご利用ください

SELECT name FROM table WHERE name LIKE 'test%%'

そしてあなたは結果を得るでしょう

SELECT name FROM table WHERE name LIKE 'test%'

これを SQLServer 2005 および 2008 でテストしました

于 2015-04-30T08:41:11.847 に答える