分享

阅读帖子今完学习中看到有个资料说UPDATE语句是从左向右顺序执行的

 accesine 2005-11-14
大家好,没事写篇文章,看标题一定吓死你们,好象我在SQL方面有很高的造诣似的,其实只是一时灵光咋现,写了一句自己认为很有水平的UPDATE语句而已
    ,并且可以在set中为变量付值,也就是下面这样
    update table1 set @test_vr = 1,table1.col_1 = 1,table1.col_2 = 2......
他会逐行的顺序的干这个事情:@test_vr变为1,然后table1.col_1变1,然后table1.col_2变2.....
开始并不觉得有什么意思,不就是付了个变量吗???就在这时问题出现了,以前写过用OPENDATASOURCE将EXECL表格数据转到SQL里面来的过程,运行了发现有两列的数据换位了,后来是在前台将两列数据提出,经过中间变量转来转去搞定的,现在既然知道可以给变量在更新的时候付值,那我可不可以给他付上一个列值呢???这样他就可以起个中间过度的作用,以便交换两列的信息呢???形式如下
update table1
set @ test_vr = table1.col_1,
    table1.col_1 = table1.col_2,
    table1.col_2 = @ test_vr
如果可以的话就能一条SQL搞定两列的数据交换了

想法出来了,马上测试,顿时我象加了兴奋剂的机枪兵一样,开始在键盘上狂打,我打打打。。。打打打。。。,结果如下:

create table #table1
(k1 int identity,
col_1 float default (rand() * 1000),
col_2 float default (rand() * 1000)
)

insert #table1 default values
insert #table1 default values
insert #table1 default values
insert #table1 default values
insert #table1 default values
insert #table1 default values
insert #table1 default values

select * from #table1

declare @temp float
UPDATE #table1
SET @temp = col_1,
    col_1 = col_2,
    col_2 = @temp

select * from #table1
drop table #table1
/*
更新前结果
1    941.36949447026325    233.37477802301783
2    923.1058159060284    192.20059842338031
3    643.87548560639073    756.58847730848083
4    918.08798431334401    602.32691571853718
5    535.33978217043614    783.31296232037164
6    227.3707647382418    407.77376660523362
7    386.33853691324845    573.14291947875824
更新后结果
1    233.37477802301783    941.36949447026325
2    192.20059842338031    923.1058159060284
3    756.58847730848083    643.87548560639073
4    602.32691571853718    918.08798431334401
5    783.31296232037164    535.33978217043614
6    407.77376660523362    227.3707647382418
7    573.14291947875824    386.33853691324845
*/
大家应该看明白了吧,我觉得是很奇妙的,好了,今天不熬夜,也不嗑安眠药了,拉灯,告钟,睡觉先!!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多