web-dev-qa-db-ja.com

2000(80)互換モードのデータベースのSQL Server 2008 R2で非ANSI結合を特定する

SQL Server 2008 R2で実行されている非常に古いデータベースがあります。データベースは2000(80)互換モードで実行されており、ストアドプロシージャ、ビュー、関数に多数の非ANSI結合があります。

CTE SQL、ROW_NUMBER OVER (PARTITION BY)などを使用できるようにするには、このデータベースを少なくとも2005互換モードに更新する必要があります。

最初にSQL Server 2008 R2にアップグレードしたとき、明らかに最初にアップグレードアドバイザー2008 R2を実行し、非ANSI結合があったすべてのSQLを強調表示しました。それらを無視してデータベースをSQL Server 2000(80)互換モードにしました。

現在、SQL Server 2008 R2アップグレードアドバイザーは、バージョンがサポートされておらず(既にそのバージョンを使用しているため)、2000(80)データベースは2012アップグレードアドバイザーでサポートされていないため機能しなくなります。どちらか。

データベース全体のスクリプトを作成し、*==**=*などをチェックするのに苦労して足りない私の質問は、すべてのプロシージャ、ビュー、関数を検出するために使用できるツールがあるかどうかです。これらの結合が含まれているので、それらを書き直すことができます。

4
HeavenCore

これにより、いくつかの誤検知が発生する可能性があります(たとえば、*=をコメントに含めます)。

SELECT 
  obj = QUOTENAME(SCHEMA_NAME(o.[object_id]))
      + '.' + QUOTENAME(o.name),
  o.type_desc
FROM sys.sql_modules AS m
INNER JOIN sys.objects AS o
ON m.[object_id] = o.[object_id]
WHERE m.definition LIKE '%=*%'
OR m.definition LIKE '%*=%';
4
Aaron Bertrand

syscomments 互換ビューには、すべてのストアドプロシージャ、トリガー、関数、および類似のオブジェクトのコードのコピーが含まれています。 「LIKE」基準を使用して簡単に検索して、更新が必要なオブジェクトIDのリストを見つけることができます。

0
darin strait