DECLARE tableList CURSOR FOR
SELECT t.name
FROM sys.tables t
INNER JOIN sys.columns c
ON t.object_id = c.object_id
WHERE
t.name NOT LIKE 'z%'
AND t.name NOT LIKE '%delete%'
AND t.name <> 'tblUsers'
AND t.name <> 'tblUserLogins'
AND t.name <> 'searchR'
AND t.name <> 'tblUserPortfolio'
AND t.name <> 'alerts_User'
AND c.name LIKE 'userid'
OR c.name LIKE 'user_id'
ORDER BY name
OPEN tableList
FETCH NEXT FROM tableList
INTO @tablename
上記はカーソルを作成するためのクエリです。実行するには高価である可能性が高いと思われる多くの操作を使用しています(LIKE
、NOT LIKE
)。カーソルを使用してこのクエリを最適化する方法は?
私は、あまりにも多くのLIKE/NOT LIKE
を使用せずにクエリを構築し、より最適なものにするためのよりよいアプローチがあるかどうかを尋ねています。
ありがとうございました。
EDIT:
ここにカーソルを使用しての意図が一致するすべてのテーブルには、私たちはその後、動的にレコードを削除/更新/挿入することができLoop Through
にあります。
私は使用しているデータベースに150を超えるテーブルがあります。だから、SQL Serverは汚い仕事をするかもしれないと思っていました。
実際の問題は、ここでは 'CURSOR'であってクエリではないと思われます。また、それらは高価です。特にsys.tablesとsys.columnsで行のボリュームが狂って大きくならない –
最後の2つの条件( 'OR'と組み合わせたもの)はおそらく括弧で囲まれていなければなりません。そうでなければ、最後の2つの条件。 –