N_Chow 好几天没来了。
主要是理解一下这一句:
update @processTable
SET @z=value=CASE WHEN @q=id THEN @z else '' end +value +',',
@q=@q+Case WHEN @q=ID THEN 0 ELSE 1 end,
@step=ProcessStep=@Step+1
from @processTable1.: @step=ProcessStep=@Step+1
@step加一后给ProcessStep,同时给自已
相当于:C的:ProcessStep=++@Step
2.
@q=@q+Case WHEN @q=ID THEN 0 ELSE 1 end
@q如果与ID同值,则不变否则加1
3`
@z=value=CASE WHEN @q=id THEN @z else '' end +value +',',功能综合上面两点
这是UPDATE的特殊用法。
主要是理解一下这一句:
update @processTable
SET @z=value=CASE WHEN @q=id THEN @z else '' end +value +',',
@q=@q+Case WHEN @q=ID THEN 0 ELSE 1 end,
@step=ProcessStep=@Step+1
from @processTable1.: @step=ProcessStep=@Step+1
@step加一后给ProcessStep,同时给自已
相当于:C的:ProcessStep=++@Step
2.
@q=@q+Case WHEN @q=ID THEN 0 ELSE 1 end
@q如果与ID同值,则不变否则加1
3`
@z=value=CASE WHEN @q=id THEN @z else '' end +value +',',功能综合上面两点
这是UPDATE的特殊用法。
解决方案 »
- 如何排除存储过程写入重复记录?
- 请教语法错误的问题
- sql语句 按wpbh求和的问题
- 如何用循环得出这样的字符串?
- mssql 2000数据库连接提示:在建立与服务器的连接时出错,在连接到SQL Server 2005时,在默认的设置下SQL Server不允许进行远程连接
- 请问如何获得EXEC的返回结果
- 请高手解决问题(在线等待,急急急急急急)
- 不用union如何进行两个表的合并
- High scores for the examples codes by using VB to manage SQL Server
- 如何用msde分发数据库 and 连接总失败
- 怎么才能在查询分析器中更新这样的字段
- 请问表有容量限制吗?
update @processTable
SET @z=value=CASE WHEN @q=id THEN @z else '' end +value +',',
@q=@Case WHEN @q=ID THEN @q ELSE ID end,
@step=ProcessStep=@Step+1
from @processTable
通常的update语句是:update a set c1 = 1 where id = 1
但可以在修改的同时给变量赋值:update a set @i = c1 = 1 where id = 1;这时@i=1。
如果再变化一下:update a set @i = c1 = @i + 1 where id = 1;就相当于先给id=1的c1字段赋值为@i+1,然后再将@i赋值为@i+1。
最后去掉where条件,就成了一个生成由1到表记录数之间的连续自然数的绝佳语句。不知道飘香从哪弄来的,这个语句的确经典!
declare @YourResultTable table (id int, value varchar(10))
insert @YourResultTable values(1, 'cool')
insert @YourResultTable values(1, 'nice')
insert @YourResultTable values(1, 'wow')
insert @YourResultTable values(2, 'cool')
insert @YourResultTable values(2, 'wow')
insert @YourResultTable values(4, 'nice')
insert @YourResultTable values(6, 'cool')
insert @YourResultTable values(6, 'nice')
declare @YourResultTable table (id int, value varchar(10))
insert @YourResultTable values(1, 'cool')
insert @YourResultTable values(1, 'nice')
insert @YourResultTable values(1, 'wow')
insert @YourResultTable values(2, 'cool')
insert @YourResultTable values(2, 'wow')
insert @YourResultTable values(4, 'nice')
insert @YourResultTable values(6, 'cool')
insert @YourResultTable values(6, 'nice')--select * from @YourResultTabledeclare @z varchar(100),@q int
select @q = 0declare @ProcessTable table (id int, value varchar(100))
insert @ProcessTable
select id, value
from @YourResultTable
order by id, valueupdate @ProcessTable
set @z = value = case @q when id then @z else '' end + value +
',' , @q = id
from @ProcessTable
--select * from @ProcessTableselect id,max(value) from @ProcessTable group by idset nocount off
update @processTable
SET @z=value=CASE WHEN @q=id THEN @z else '' end +value +',',
@q=@Case WHEN @q=ID THEN @q ELSE ID end,
@step=ProcessStep=@Step+1
from @processTable
declare @YourResultTable table (id varchar(2), value varchar(10))
insert @YourResultTable values('1', 'cool')
insert @YourResultTable values('1', 'nice')
insert @YourResultTable values('1', 'wow')
insert @YourResultTable values('2', 'cool')
insert @YourResultTable values('2', 'wow')
insert @YourResultTable values('4', 'nice')
insert @YourResultTable values('6', 'cool')
insert @YourResultTable values('6', 'nice')--select * from @YourResultTabledeclare @z varchar(100),@q varchar(2)
select @q = nulldeclare @ProcessTable table (id varchar(2), value varchar(100))
insert @ProcessTable
select id, value from @YourResultTable
order by id, valueupdate @ProcessTable
set @z = value = case @q when id then @z else '' end + value +',' , @q = id
from @ProcessTable
--select * from @ProcessTableselect id,max(value) from @ProcessTable group by idset nocount off