0

同じフィールド名が多くのテーブルに複製されるフィールドの名前を変更する必要があります。

すべてのテーブルを調べ、fieldAが存在する場合は、名前をfieldBに変更するスクリプトまたは無料/低コストのツールを探します。

ありがとう

4

3 に答える 3

2

SQL Serverメタデータテーブルを使用して、目的に応じた動的SQLステートメントを作成できます。使用可能なテーブルのリストについては、テーブルのリストにはsys.tablesを、列のリストにはsys.columnsを使用できます。これらのテーブルを使用して、SQLステートメントのテーブルを作成できます。動的SQLを実行するには、 sp_executesqlストアドプロシージャを実行する必要があります。

これは、メタデータテーブルとsp_executesqlの使用方法を示すためのサンプルコードです。また、より快適な他のメタデータテーブルを使用したことに注意してください。また、カーソルを使用して、クエリによって返されるすべてのスクリプトを実行することもできます。

CREATE Database TestDB

CREATE Table Table1 (Id int , fieldA varchar(50) )

Declare @update_query nvarchar(max)

select 
    @update_query = 'sp_rename ''' + t.TABLE_NAME + '.' + c.COLUMN_NAME + ''',''' + 'fieldB' + ''''
From INFORMATION_SCHEMA.COLUMNS c JOIN INFORMATION_SCHEMA.Tables t ON c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
WHERE
    c.COLUMN_NAME = 'fieldA'

SELECT @update_query

EXEC sp_executesql @update_query
于 2011-09-26T01:54:48.083 に答える
1

まだ行っていない場合は、VS2010のデータベースプロジェクトタイプを確認してください。SQL ServerManagementStudioを使用するよりもDBリファクタリングを簡単にする多くの機能があります。

たとえば、列の名前を変更すると、古い列名を参照するすべてのFKのビルドエラーが発生します。また、データベースオブジェクトが、存在しなくなったオブジェクトを参照していないことを確認するために、多くのビルド時検証を行います。また、すべてのデータベースオブジェクトはテキストファイルとして保持されるため、名前の変更などのアクションはほとんど検索/置換にすぎません。

また、DBプロジェクトのスクリプトとデータベースを比較し、DIFFレポートを生成し、選択した変更を2つの間(DBプロジェクトからSQL Serverに、またはその逆)に移動するスクリプトを生成する非常に便利な「同期」機能を備えています。

そうは言っても、名前の変更は自動的には行われません。つまり、列の名前を変更しても、プロジェクト全体でその列へのすべての参照が修正されるわけではありません。ただし、間違えると、データベース構造を検証するときにビルドエラーが発生します。したがって、少なくとも、変更する必要のある場所を簡単に見つけることができます。

于 2011-09-26T02:02:45.800 に答える
0

Azure SQL Serverを使用している場合は、Samの回答をsp_renameの別の入力パラメーター@objtype='COLUMN'とともに使用できます。

Declare @update_query nvarchar(max)

select 
    @update_query = 'sp_rename ''' + t.TABLE_NAME + '.' + c.COLUMN_NAME + ''',''' + 'fieldB' + ''',''' + 'COLUMN' + ''''
From INFORMATION_SCHEMA.COLUMNS c JOIN INFORMATION_SCHEMA.Tables t ON c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
WHERE
    c.COLUMN_NAME = 'fieldA'

SELECT @update_query

EXEC sp_executesql @update_query
于 2016-01-12T19:54:52.627 に答える