既存のテーブルのコピーで新しいデータベースを作成しましたが、これらのテーブルの名前を変更しました。(多分SysObjectsを使用して)すべてのストアドプロシージャのこれらのテーブルへの参照?すべてのストアドプロシージャ内のすべてのテーブル参照を変更するSQLスクリプト
ありがとうございました。
既存のテーブルのコピーで新しいデータベースを作成しましたが、これらのテーブルの名前を変更しました。(多分SysObjectsを使用して)すべてのストアドプロシージャのこれらのテーブルへの参照?すべてのストアドプロシージャ内のすべてのテーブル参照を変更するSQLスクリプト
ありがとうございました。
はINFORMATION_SCHEMA.ROUTINESに依存しないでください。あなたがコンテンツを一覧表示するm.definition
のコメントを解除することができます
SELECT DISTINCT
LEFT(s.name+'.'+o.name, 100) AS Object_Name,o.type_desc --, m.definition
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 '%'[email protected]+'%'
ORDER BY 1
SELECT
OBJECT_SCHEMA_NAME(m.object_id)+'.'+OBJECT_NAME(m.object_id) --, m.definition
FROM sys.sql_modules m
WHERE m.definition like '%whatever%'
SELECT
OBJECT_SCHEMA_NAME(m.object_id)+'.'+OBJECT_NAME(m.object_id), o.type_desc
--,m.definition
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.object_id
WHERE m.definition like '%whatever%'
が、私はそれを見つける:あなたはdefinition
は、データ型はnvarchar(max)の
変更する必要がある手順を見つけるために、これらのいずれかを試しているsys.sql_modules
に必要システム・テーブルでUPDATEコマンドを実行したくないため、すべてのプロシージャを識別して手動で確認する方がよいでしょう。必要な手順をスクリプト化し、変更(検索/置換または手動)してから、スクリプトを実行してください。
私はRedgateのSQL Refactorにこの機能があると思います。それ以外の場合は、すべてのオブジェクトをスクリプトアウトし、手動またはコード経由で検索して置換することができます。
SQL Server 2005では、何らかのヘルプの可能性がある同義語もサポートされています。
はい、SQLリファクタリングには名前変更されたオブジェクトのすべての参照が変更されるスマートリネーム機能があります。SQLプロンプト5はすぐにリリースされる予定です。 –
ここには、特定の検索基準に一致するストアドプロシージャの定義を取得するために使用できるSQLのチャンクがあります。マーチンが提案したように検索と置換を行うために単にそれを変更することができます。
'%TABLE_NAME%'を変更する検索条件またはテーブル名に変更するだけです。
これが役に立ちます。
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%TABLE_NAME%' AND ROUTINE_TYPE='PROCEDURE'
それは面白いです! +1 –
** 'ROUTINE_DEFINITION'は' nvarchar(4000) 'なので、INFORMATION_SCHEMA.ROUTINES **には依存しないでください。 'sys.sql_modules'を使う必要があります。' definition'は 'nvarchar(max)'です。サンプルクエリの私の答えを見てください。 –
それは(テスト用データベースのような)短期なら、簡単に解決策は、古い名前を使用して、あなたは変わっ各テーブルにVIEW
を作成することであってもよいです。たとえば、あなたがtests_new
にテーブルtests
を変更した場合、あなたが行うことができます:
CREATE VIEW dbo.tests
AS
SELECT * FROM dbo.tests_new
あなたのすべての手順は、その参照dbo.tests
は、実際にdbo.tests_new
内のデータを見ていきます。
非常に非常に悪い考えであるこれはパーマネント/プロダクションDBであれば、あなたの構造に難読化レイヤーを追加するだけで、それを維持するのは悪夢になります。
sprocsのテーブル参照をシステムデータ辞書から変更することはできません。ストアドプロシージャを作成するスクリプトを取得し、スクリプト内のテーブル名を変更する必要があります。あなたがスクリプトを持っているなら、これは単純な検索であり、ほとんどの部分を置き換えます。
スクリプトをお持ちでない場合は、ストアドプロシージャスクリプトのテキストをsys.sql_modulesから取得するか、SSMSを使用して取得できます。 ROUTINE_DEFINITION
だけnvarchar(4000)
あるので
私は 'sysobjects'の言及からSQL Serverを想定していますか?もしそうなら、どのバージョン? –
はいいいえSQL Server 2005 – Grace
ストアドプロシージャのスクリプトを生成し、変更したすべてのテーブル名を検索して置き換えます。 – pavanred