すべてのストアド プロシージャでテーブルのスキーマ名を変更する方法

StackOverflow https://stackoverflow.com/questions/101463

  •  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'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top