2011-02-14 4 views
3

元のデータベース名がハードコードされているデータベースのオブジェクトを特定する方法を見つける必要があります。私は別の名前でデータベースのコピーを復元し、すべての命名調整を行うために自家製のスクリプトを実行しました。元のDBの名前がABC_Dbで、リストアされたコピーの名前がXYZ_Dbに変更されたとします。私はCoreTableにUPDATEを実行しようとすると、私はなどとの関係とインデックス、反対ハードコードされたデータベース名を特定する方法 - SQL Server 2008 R2

無効なオブジェクト名「ABC_Db.dbo.CoreTable」

私はsyscommentsのに対して照会し、やった様々な手動チェックを取得します運がない。次は何ですか?

おかげで、

ジョン

答えて

2

をすべてのコードをカバーし、すべてのオブジェクトのために安全である - そしてそれは無料です。それは素晴らしいです。

http://www.red-gate.com/products/sql-development/sql-search/

+0

見つけた!彼らは補助データベースにいて、私のやり方を探し出すのに数日かかっていました。私はこのSQL Searchが気に入っています。 –

0

最良の方法は、DBのスクリプトを生成し、そのようなことは、任意のストアドプロシージャまたは他のコードに存在する場合を見つけるために、ファイルツールでテキストエディタの検索を使用することです。

0

完全なオブジェクト名がハードコードされているトリガがありますか?

2

sys.syscomments textはnvarchar(4000)です。定義が複数の行にまたがって分割されている場合、切り捨てに問題が生じる可能性があります。代わりにこれを試してください。それを

SELECT 
    OBJECT_NAME(object_id) 
FROM 
    sys.sql_modules 
WHERE 
    definition LIKE '%ABC_Db%' 

のsyscommentsを検索するに

select quotename(s.name)+'.'+quotename(o.name) as object_name, o.type_desc 
    from sys.sql_modules m 
     inner join sys.objects o 
      on m.object_id = o.object_id 
     inner join sys.schemas s 
      on o.schema_id = s.schema_id 
    where m.definition like '%ABC_Db%' 
3

はロングコードのために信頼性がありません。

sys.sql_modulesは、Microsoft SQL Serverデータベーススキーマを検索したい場合は、最良のツールはレッドゲートのSQL検索で

0

SQLプロンプト5は存在しないオブジェクトを参照するストアドプロシージャを特定するであろう、「無効なオブジェクトを探す」と呼ばれる機能があります。それは試してみる価値があるかもしれません。

関連する問題