2つのテーブルがあり、どちらもすでにデータが入力されており、次の列があります。
Table1
jobType char
jobDesc varchar
New_table
jobID int
jobType char
Table1がusingを参照するようにTable1.jobType
、列に置き換えたいと思います。の既存のデータはすべて、適切なに「変換」する必要があります。jobID
New_table
jobID
Table1.jobType
jobID
2つのテーブルがあり、どちらもすでにデータが入力されており、次の列があります。
Table1
jobType char
jobDesc varchar
New_table
jobID int
jobType char
Table1がusingを参照するようにTable1.jobType
、列に置き換えたいと思います。の既存のデータはすべて、適切なに「変換」する必要があります。jobID
New_table
jobID
Table1.jobType
jobID
基本的なドリル:
元のジョブテーブルから開始します
create table dbo.job
(
id int not null identity(1,1) ,
job_type varchar(64) not null ,
job_description varchar(128) not null ,
constraint job_PK primary key clustered (id) ,
)
新しいジョブタイプテーブルを作成します(データを入力することを忘れないでください)
create table dbo.job_type
(
id int not null identity(1,1) ,
name varchar(64) not null ,
constraint job_type_PK primary key clustered ( id ) ,
constraint job_type_AK01 unique nonclustered ( name ) ,
)
テーブルdbo.jobを変更して、新しいjob_type_id列を追加します
alter table dbo.job
add job_type_id int null
[old] job_type列の値に基づいてjob_type_idの値をマッピングして、ジョブテーブルを更新します。
update dbo.job
set job_type_id = jt.id
from dbo.job j
join dbo.job_type jt on jt.name = j.job_type
新しい列を変更して、NULL不可にします。これは、すべての行のjob_type_idの値がnull以外であることを確認するまで失敗します。
alter table dbo.job
alter column job_type_id int not null
必要な新しい外部キー制約を追加します
alter table dbo.job
add constraint job_AK01
foreign key ( job_type_id )
references dbo.job_type ( id )
最後の取り返しのつかないステップは、古い列を削除することです。これにより、この列を参照するクエリやストアドプロシージャなどが壊れます...しかし、あなたはすでにこの部門で宿題をして、必要なすべての変更を調整しましたよね?
alter table dbo.job drop column job_type
表1のJobType列のデータがすべてテキストとして格納されている整数値である場合は、以下を実行します。
ALTER TABLE Table1 ALTER COLUMN JobType INT
列にABC1、ABC2などの非整数値が含まれている場合は、最初に列のデータを変更する必要があります。ここで使用した値の例では、次のように実行します。
UPDATE Table1
SET JobType = SUBSTRING(JobType,4,1)
次に、上記のALTERTABLEステートメントを実行できます。