以编程方式更新w。 SQL

时间:2014-08-08 16:03:24

标签: sql sql-server-2008 tsql

我们目前有一个系统设置,为每种类型的工作提供一个3个字母的“代码”。我能够与管理层进行一些关于将它们移动到int值的问题,因此我可以自动填充并使用uniqueidentifier运行。所以他们现在就加入了。

当前表:

tblWorkID
WorkID: [3 digit keys]

我希望/需要的是Update将所有WorkID密钥转换为int值,升序。这就是我到目前为止所做的:

SELECT distinct WorkID
from tblWorkID
order by WorkID

任何想法如何将逻辑放在那里根据该数据创建一个运行数字,或者我是否试图用SQL做太多?这是482个参赛作品,我宁愿不用手工做(但如果需要的话)。

像这样:(显示数据)

AAA Apple Picking
AAB Construction
AAC General Cleaning

让它填充到这样的东西:

1 Apple Picking
2 Construction
3 General Cleaning

(忽略数字和字母序列旁边的文字,我把它放在那里进行解释。)

更新:我目前拥有的是WorkID:[3个字母的序列]只是添加到WorkID表中的另一个字段(WorkHrs,WorkContact,WorkContract等)所以有多个WorkID,比如AAA和AAC table - 数据完整性非常好,多云。

Update2:我当前的表结构是这样的(我将很快添加另一个ID uniqueidentifier字段):

tblWorkID
WorkId
WorkHrs
WorkContact
WorkContractID
WorkMgrID
WorkDetails

2 个答案:

答案 0 :(得分:2)

编辑: 根据你的评论(以及一些假设......)我认为你可以使用DENSE_RANK而不是row_number:

 SELECT DENSE_RANK () OVER (ORDER BY <your 3 letter code>,

这样,相同三个字母代码的所有实例都会得到相同的数字。

如果我了解您,您可以使用ROW_NUMBER()函数生成您的运行号码:

SELECT ROW_NUMBER() OVER (ORDER BY <your 3 letter code>,
...

或者,根据您当前的表格结构,您可以只添加identity列。

ALTER TABLE <Your Table>
ADD <NEW COLUMN NAME> Identity(1, 1)

答案 1 :(得分:1)

为每个WorkID创建一个ID

create table T (id int identity(1,1), WorkID char(3))
    insert T select distinct WorkID from thetable order by WorkID asc

更新现有的

update thetable set WorkID = (select id from T where T.WorkID = thetable.WorkID)

将列类型更改为INT。