0

2つのテーブルがあり、どちらもすでにデータが入力されており、次の列があります。

Table1
jobType char
jobDesc varchar

New_table
jobID int
jobType char

Table1がusingを参照するようにTable1.jobType、列に置き換えたいと思います。の既存のデータはすべて、適切なに「変換」する必要があります。jobIDNew_tablejobIDTable1.jobTypejobID

4

2 に答える 2

1

基本的なドリル:

  • 元のジョブテーブルから開始します

    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
    
于 2012-09-26T19:14:22.197 に答える
0

表1のJobType列のデータがすべてテキストとして格納されている整数値である場合は、以下を実行します。

ALTER TABLE Table1 ALTER COLUMN JobType INT

列にABC1、ABC2などの非整数値が含まれている場合は、最初に列のデータを変更する必要があります。ここで使用した値の例では、次のように実行します。

UPDATE Table1
SET JobType = SUBSTRING(JobType,4,1)

次に、上記のALTERTABLEステートメントを実行できます。

于 2012-09-26T18:55:04.480 に答える