首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:用引用另一个表的列的新列替换原始列

SQL:用引用另一个表的列的新列替换原始列
EN

Stack Overflow用户
提问于 2012-09-26 18:33:42
回答 2查看 674关注 0票数 0

我有两个表,两个表都已经填充了数据,并且有以下列:

Table1

jobType焦

jobDesc静脉曲张

New_table

jobID整型

jobType焦

我想用一个Table1.jobType列替换jobID,这样Table1现在将引用使用jobIDNew_tableTable1.jobType中的任何现有数据都必须“转换”到适当的jobID

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 19:14:22

基本演练:

  • 从原始作业表开始 创建表dbo.job ( id int null标识(1,1),job_type varchar(64) null,job_description varchar(128) null,约束job_PK主键群集(id) )
  • 创建新的作业类型表(不要忘记填充它) 创建表dbo.job_type ( id int null标识(1,1),名称varchar(64) null,约束job_type_PK主键群集( id ),约束job_type_AK01唯一的非聚集(名称),
  • 更改表dbo.job以添加新的job_type_id列 alter dbo.job添加job_type_id int null
  • 更新作业表,根据旧的job_type_id列的值映射job_type的值。 更新dbo.job set job_type_id = jt.id从dbo.job j连接到dbo.job_type jt on jt.name = j.job_type
  • 更改新列,使其不可空。在确保所有行都具有job_type_id的非空值之前,这将失败: alter dbo.job alter列job_type_id int not null
  • 添加所需的新外键约束 alter dbo.job添加约束job_AK01外键( job_type_id )引用dbo.job_type ( id )
  • 最后,也是不可撤销的一步是删除旧列。这将打破任何查询,存储过程等引用这个column...but,您已经在这个部门做了作业,并协调了所有必要的变化,对吗? alter dbo.job下拉列job_type
票数 1
EN

Stack Overflow用户

发布于 2012-09-26 18:55:04

如果JobType列中的Table1中的数据都是以文本形式存储的整数值,则运行以下命令:

代码语言:javascript
复制
ALTER TABLE Table1 ALTER COLUMN JobType INT

如果列包含非整数值,如ABC1、ABC2,则首先需要更改列中的数据。使用我在这里使用的示例值,您将运行:

代码语言:javascript
复制
UPDATE Table1
SET JobType = SUBSTRING(JobType,4,1)

然后可以运行上面的ALTER语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12608200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档