2

(長い質問で申し訳ありませんが、簡潔にしようと思います。)

SQL Server Profilerを実行していて、パフォーマンスの問題を追跡しています。私はプロファイラーの機能に比較的慣れておらず、データに対してクエリを実行できるようにトレースをテーブルにエクスポートしました。

私が直面していることの1つは、トレースのエクスポートによって生成されたテーブルのTextDataフィールドに対してselectクエリを実行するという一見奇妙な動作です。フィールドのデータ型(ntext、null)に関係している可能性があります。特定の値を選択していますが、予期しない結果が得られます。たとえば、これを行う場合:

select * from [TraceAnalyzer].dbo.TraceTable

そして私はこのような値に興味があります:

exec [Sproc_of_interest] @parm1=992

私はこのようなクエリを実行します:

select * from [TraceAnalyzer].dbo.TraceTable
where TextData like '%exec [Sproc_of_interest] @parm1=%'

しかし、返される結果は空です。

また、次のようなクエリを実行すると、次のようになります。

select * from [TraceAnalyzer].dbo.TraceTable
where TextData like '%exec [Sproc_of_interest]%'

次のような予期しないTextData値を取得しますexec sp_reset_connection

基準の角かっこは物事を台無しにしますか?私はそれらを省略しようとしましたが、それはすべてを除外するだけです。SQLのselectクエリのエスケープ文字を認識していませんが、問題のあるレコードの1つから値をコピーして貼り付けると、貼り付けられた値に元のクエリの条件を満たすものが含まれていないように見えます。

任意の洞察をいただければ幸いです。ありがとう。

4

1 に答える 1

2

[Sproc_of_interest]パターン構文では、セット内の1つの文字に一致すると解釈されS,p,r,o,c,_,o,f,_,i,n,t,e,r,e,s,tます。

これを解決するための3つの可能な方法を以下に示します。

[1)角かっこでエスケープする

LIKE '%exec [[]Sproc_of_interest] @parm1=%'

2)エスケープ文字を使用する

LIKE 'exec \[Sproc_of_interest] @parm1=' ESCAPE '\'

3)CHARINDEX何かをエスケープする代わりに使用する

WHERE CHARINDEX('exec [Sproc_of_interest] @parm1=' , TextData) > 0
于 2012-11-02T19:46:26.390 に答える