すべてのストアド プロシージャでテーブルのスキーマ名を変更する方法
-
01-07-2019 - |
質問
SQL Server 2005 でテーブルのスキーマを変更する方法は知っています。
ALTER SCHEMA NewSchama TRANSFER dbo.Table1
しかし、古いスキーマ名を使用するストアド プロシージャを確認したり変更したりするにはどうすればよいでしょうか?
ごめん:つまり:ストアド プロシージャの SQL 内にテーブルの古いスキーマ名を持つストアド プロシージャがあります...プロシージャ本体に dbo.Table1 が含まれるすべてのストアド プロシージャを編集するにはどうすればよいですか...
解決
スキーマを変更する前にテーブルを右クリックして依存オブジェクトのリストを取得し、テーブルに依存しているものを調べてリストを作成し、それらを変更します。ただし、SQL サーバーが追跡する依存関係が壊れる可能性があるため、何かを見落とす可能性が常にあります。
しかし、最善の方法は、データベースをファイルにスクリプト化し、テーブル名を検索し、変更する必要があるすべての sproc のリストを作成し、それらをスクリプトに追加してスキーマを変更することです。テーブル。
他のヒント
- SSMS で [タスク] > [スクリプトの生成] を使用して、一連の Create Proc スクリプトを提供します。
- 検索と置換を使用する (オルタナティブ - H) 'Create' を 'Alter' に変更します
- 使用 F & R 「dbo.Table1」を「dbo.Table2」に変更します
- 次に実行(F5) 影響を受けるすべての SP を変更します。
シンプルですが効果的です。
@SearchObject VARCHAR(100) を宣言します
SET @SearchObject = 'searchable_table_name' -- 'searchable_table_name' を検索するテーブル名に変更します。
SELECT sc.name [検索オブジェクト]、so.name [コンテナ オブジェクト]、
case so.xtype 'u' then 'table' on 'p' and '"f' f 'and' user defined function 'else' other 'end as [container object type
FROM sysobjects なので
INNER JOIN syscolumns sc ON so.id = sc.id
WHERE sc.name LIKE '%' + @SearchObject + '%' AND so.xtype IN ('U','P','F') -- U :表、P:ストアド プロシージャ、F:ユーザー定義関数(udf)
ORDER BY [コンテナオブジェクト] ASC
-- 要求されたテーブル名を含むストアド プロシージャを表示します。
syscomments からテキストを選択します。 '%from ' + @SearchObject + '%' のようなテキスト
(sysobjects から id を選択します。type='P' および name = '')
-- 特定のストアド プロシージャの内容を表示します (上記から検索)
--sp_helptext 'DeleteAssetByID' を実行します
たとえば、Reports テーブルを作成しました。デフォルトでは dbo スキーマが割り当てられます。Reports テーブルのスキーマを変更したい場合は、まず Reporting という名前の新しいスキーマを作成します。
CREATE SCHEMA Reporting
次に、以下のスクリプトを実行して、Reports テーブルのスキーマを dbo から Reporting に変更します。
ALTER SCHEMA Reporting TRANSFER dbo.Reports
または、より深く理解するには:
ALTER SCHEMA 'newSchema' TRANSFER 'oldSchema'.'table'