大家好,没事写篇文章,看标题一定吓死你们,好象我在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 */ 大家应该看明白了吧,我觉得是很奇妙的,好了,今天不熬夜,也不嗑安眠药了,拉灯,告钟,睡觉先!!! |
|
来自: accesine > 《programming》