在做不动产项目中,业务系统数据中很多字段的值都是中文的,我们要根据对应的字典来把中文刷成代码。比如业务系统数据中权利类型是 国有建设用地使用权 ,我们需要根据字典将其换成3 。QLLX这个字段在多个表中都存在,比如FDCQ2,QLR,JSYDSYQ等,如果按照之前的做法是根据字典做对照表。利用 update * set= from FDCQ2 A, DZB B WHERE A.ID=B.ID 我不想每个表都update一遍。刚好了解到sql server 中每个数据中 的视图--系统视图中都有两个视图,第一个视图存储了所有表的所有字段,每个字段都有一个对应id,第二个视图存储了所有表的名字。诸位看官只要打开看下就明白了。于是准备利用存储过程来批量弄某个字段。首先创建一个视图,来把所有的字段存储起来。
create view dbo.ctname
as
SELECT a.name as cname,b.name as bname FROM [xx导出数据].[sys].[all_columns] a , [xx导出数据].[sys].[all_objects] b where a.object_id=b.object_id and b.type='U' and b.object_id>0
然后建立存储过程,批量更新所有含有QLLX 字段的表。如下图代码所示:
go
declare @temp varchar(60)
declare tempcursor cursor for select bname from dbo.ctname where cname='qllx'
open tempcursor
fetch next from tempcursor into @temp
WHILE(@@FETCH_STATUS=0)
begin
exec('update [xx导出数据].[dbo].['+@temp+'] set QLLX=b.代码 from [xx导出数据].[dbo].['+@temp+'] a,对照表.dbo.[权利类型字典表]b where cast(a.QLLX as nvarchar)=b.权利类型 ')
fetch next from tempcursor into @temp
end
print 'qllx'
close tempcursor
DEALLOCATE tempcursor