问一个SQL的UPDATE语句:
FOR(INT I=0;I<DATASET11.表;I++)
{
da.updatecommand.commandtext="UPDATE 表 SET 序号="+(I+1)
da.updatecommand.ExecuteNonQuery();
}
目的是使表中所有序号按顺序赋为0,1,2,3,4。
这行UPDATE语句怎么写?问题在于如何写UPDATE的WHERE子语句???
FOR(INT I=0;I<DATASET11.表;I++)
{
da.updatecommand.commandtext="UPDATE 表 SET 序号="+(I+1)
da.updatecommand.ExecuteNonQuery();
}
目的是使表中所有序号按顺序赋为0,1,2,3,4。
这行UPDATE语句怎么写?问题在于如何写UPDATE的WHERE子语句???
{
da.updatecommand.commandtext="UPDATE 表 SET 序号="+(I)+"WHERE 条件;"
da.updatecommand.ExecuteNonQuery();
} //如UPDATE tableSET ID=9999 WHERE NAME='名字';
就是这个“条件”不会写啊
确实没有主键,序号不能做主键,因为可能会删除中间一行记录,删除后要重新按顺序设一下序号,即成为1、2、3、4、5、6、7。
因为在循环里
这个语句循环时第一次应该是:where 第一条记录第二次应该是:where 第二条记录第三次应该是:where 第三条记录
我知道这样写非常非常不效率,但试过ASSCESS+VS2005环境,操作DATASET后,再 da.update(dataset11,"表1")不能把dataset里的“表1”内容写回到库里,没有办法才这样写,好在这个表行数不多
da.updatecommand.commandtext=@"
declare @ord int;
update [表] set @ord=case when @ord is null then 1 else @ord+1 end,[序号]=@ord
order by [序号];";
da.updatecommand.ExecuteNonQuery();
——————————————————————————————————————
用不着预料。首先你要把原来数据至少“序号”这一列读出来到 DataTable,比如对1、2、4、5、6顺序读出的数据写到DataTable里,然后你的循环写回的是命令:
UPDATE 表 SET 序号=1 WHERE 序号=1
UPDATE 表 SET 序号=2 WHERE 序号=2
UPDATE 表 SET 序号=3 WHERE 序号=4
UPDATE 表 SET 序号=4 WHERE 序号=5
UPDATE 表 SET 序号=5 WHERE 序号=6 至于说对于1、2、4、5、6、7顺序读出的数据,写回的命令自然是:
UPDATE 表 SET 序号=1 WHERE 序号=1
UPDATE 表 SET 序号=2 WHERE 序号=2
UPDATE 表 SET 序号=3 WHERE 序号=4
UPDATE 表 SET 序号=4 WHERE 序号=5
UPDATE 表 SET 序号=5 WHERE 序号=6
UPDATE 表 SET 序号=6 WHERE 序号=7你的程序才不需要读出的序号是不是连续的,只要按从小到大的顺序就行。
UPDATE 表 SET 序号=2 WHERE key=2
UPDATE 表 SET 序号=3 WHERE key=4
UPDATE 表 SET 序号=4 WHERE key=5
UPDATE 表 SET 序号=5 WHERE key=6 至于说对于1、2、4、5、6、7顺序读出的数据,写回的命令自然是:
UPDATE 表 SET 序号=1 WHERE key=1
UPDATE 表 SET 序号=2 WHERE key=2
UPDATE 表 SET 序号=3 WHERE key=4
UPDATE 表 SET 序号=4 WHERE key=5
UPDATE 表 SET 序号=5 WHERE key=6
UPDATE 表 SET 序号=6 WHERE key=7这样就能避免[序号]列的问题。
要好好学学存储过程了,你有电子教程吗?推荐一下