web-dev-qa-db-ja.com

既存のテーブルに新しい主キーID列を追加する

テーブルに新しい列を追加したい。テーブルにはすでにデータが入力されています。

これを行うには、テーブルの完全なコピーを作成し、内容を含めて、主キーID列を追加します。

したがって、新しいテーブルを作成できます。

create table myTestTable
(
    ID uniqueidentifier NOT NULL,
    SomeId uniqueidentifier NOT NULL,
    SomeOtherId uniqueidentifier NOT NULL,
    constraint table_constraint PRIMARY KEY (ID)
)

-- modify the script below to copy the old table across to the new one,
-- generating a unique ID (GUID) into

insert into myTestTable
(ID,
ClaimPaymentId,
TemplateId)
select
    NEWID(),
    SomeId ,
    SomeOtherId 
from [dbo].[TableToBeCopied]

次に、コピーしたテーブルをドロップして、コピーの名前を古いテーブル名に変更できます。

しかし、私はそのようなテーブルを約60個作成する必要があり、テーブルの名前をパラメーターとして取り、列定義を自動的に生成するスクリプトを作成したいと考えています。しかし、私はこれを行う方法を見ることができません。何か案は?

3
Adrian Hodgson

GUID ID列を次のように追加できます。

ALTER TABLE [yourSchema].[yourTable] add [ID] UNIQUEIDENTIFIER DEFAULT NEWID() NOT NULL

複数のテーブルに対してこれを行うには、次のようなものを使用できます。

SELECT 'ALTER TABLE '+QUOTENAME(s.name)+'.'+QUOTENAME(t.name)+' add [ID] UNIQUEIDENTIFIER DEFAULT NEWID() NOT NULL'

FROM sys.schemas s
JOIN sys.tables t ON t.schema_id = s.schema_id

WHERE (     (s.name = 'Schema1' AND t.name IN ('Schema1_TableList'))
            OR
            (s.name = 'Schema2' AND t.name IN ('Schema2_TableList'))
            ... -- Add more schemas and their tables as needed
        )

これにより、すべてのALTER TABLEステートメントは、ID値が事前に入力されたIDUNIQUEIDENTIFER列を作成します。

2
James Anderson