5

過去の開発者がプロ​​グラミングを行ったクライアントがいます。彼らのコードは最近疑わしいものになりました。パラメータ化されたクエリを使用しているかどうかを知りたいです。SQL Server を介してパラメーター化されていない要求を検出できることを望んでいましたが、これを行う方法が見つかりませんでした。クエリは次のようなものになる可能性があるため、すべてのクエリをパラメーター化する必要があるわけではないことを理解しています

select count(*) from Customers

しかし、SQL Server がパラメーター入力ではなく文字列定数入力を持つクエリをプログラムで教えてくれれば、それは素晴らしいことです。ところで、すべての SQL クエリをログに記録し、@ 記号を含むすべての行を削除するのは近いですが、以下のクエリは正当であると見なされます。

select * from Users where Username='user' and Password=@Password

そのため、コマンドの内容を読み取り、すべての入力がパラメーター化されているかどうかを判断するには、SQL Server が本当に必要です。ありがとうございました。

4

2 に答える 2

0

Mihai は、現在のシステム オブジェクト を指していますdm_exec_cached_plans。(あなたの質問への回答を調べたところ、[syscacheobjects]実際には非推奨であることがわかりました。)したがって、私は彼の回答に賛成票を投じました。

ただし、WHERE. を使用すると、前に示したような をdm_exec_cached_plans使用した同様のクエリが次のようになります。WHERE

SELECT usecounts, cacheobjtype, objtype, text
FROM sys.dm_exec_cached_plans 
    CROSS APPLY sys.dm_exec_sql_text(plan_handle) 
WHERE [text] LIKE '%WHERE%''%'
----AND [text] NOT LIKE '%sp_executesql%'  ----queries probably ok, with sp_executesql
----WHERE usecounts > 1   ----un-commenting this might also be interesting to check out. 
ORDER BY usecounts DESC;

または、Mihai のクエリに追加するだけです。

SELECT
    CP.usecounts
    , CP.cacheobjtype
    , ST.text as sql_Statement    
    , QP.query_plan
FROM
    sys.dm_exec_cached_plans CP
    CROSS APPLY sys.dm_exec_sql_text(CP.plan_handle) ST
    CROSS APPLY sys.dm_exec_query_plan(CP.plan_handle) QP
WHERE
    CP.objtype = 'Adhoc'
    AND ST.dbid = DB_ID()
    AND ST.text LIKE '%WHERE%''%'
ORDER BY
    CP.usecounts DESC

ORDER BYよく発生するクエリが頻繁な露出を引き起こしているという考えに基づいて構築された に注意してください。しかし、おそらくすでにお気づきのように...疑わしいコードがクエリ文字列自体を構築している場合、一意の値 (行番号、顧客 ID、注文番号など) によって一意のクエリが生成される可能性があります。sp_executesql) がありますが、実際に確認することが最も重要である可能性がありますusecounts = 1

あなたの質問に対する答えに関する限り、(「SQL クエリはいつこのテーブルから削除されますか?」): キャッシュに十分なクエリがあり、「メモリ プレッシャ」が発生すると、古いクエリは新しいクエリとしてキャッシュから削除されます。入ってきて...そしてSQLが再起動するとすべてがクリアされます。( http://www.sqlservercentral.com/Forums/Topic1375781-391-1.aspxおよびhttp://technet.microsoft.com/en-us/library/ms181055%28v=sql.105%29.aspxを参照)

それが役立つことを願っています...

于 2014-04-18T17:18:57.217 に答える