只知道行号和列号 怎么写 SQL UPDATE语句

doxob 2019-08-01 04:06:47
数据库中只知道要更改的数据对应的行列号,如何用update语句更改那个数据。
比如我要更改数据表 ABC_TAB 中第2行第3列的数据为 “HELLO”?
...全文
213 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2019-08-01
  • 打赏
  • 举报
回复
是的, 具体需看LZ的需求和实际场景.
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
引用 10 楼 唐诗三百首 的回复:
大版,我想问一下这块
row_number() over(order by getdate())
之前我也想这样写,但是我觉得上边这个rn,不是固定的,但是我不太清楚受什么影响,rn的值一样可能下次对应的数据库里的行就不一样,不知道我理解的对不对。
doxob 2019-08-01
  • 打赏
  • 举报
回复
好吧,我只能想办法得到列名和行号才行了,谢谢了
唐诗三百首 2019-08-01
  • 打赏
  • 举报
回复

-- 建测试表
create table ABC_TAB(col1 varchar(10),col2 varchar(10),col3 varchar(10),col4 varchar(10))

insert into ABC_TAB
 select '11','row1','test1','test111' union all
 select '22','row2','test2','test222' union all
 select '33','row3','test3','test333' union all
 select '44','row4','test4','test444'


-- 更改的数据对应的行列号
declare @updaterow int,@updatecol int,@newvalue nvarchar(100)
select @updaterow=2,@updatecol=3,@newvalue=N'HELLO' --> 更改第2行第3列的数据为 “HELLO”

declare @tsql nvarchar(1000)
select @tsql=N'update t set '
             +(select top 1 N'['+b.name+N']=N'''+@newvalue+N''' '
               from sys.tables a
               inner join sys.columns b on a.object_id=b.object_id
               where a.name=N'ABC_TAB' 
               and b.column_id=@updatecol)
             +N' from (select rn=row_number() over(order by getdate()),* from ABC_TAB) t '
             +N' where t.rn='+rtrim(@updaterow)
exec(@tsql)


-- 结果
select * from ABC_TAB

/*
col1       col2       col3       col4
---------- ---------- ---------- ----------
11         row1       test1      test111
22         row2       HELLO      test222
33         row3       test3      test333
44         row4       test4      test444

(4 行受影响)
*/
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
的是这样
 UPDATE ABC_TAB set 字段名="HELLO" where XXXX--这里规定是哪一行 
doxob 2019-08-01
  • 打赏
  • 举报
回复
是在成程序中处理的,处理后我能得到更改的行号列号,还有更改后的值,然后再UPDATE到数据库中,没有简便方法么?
像是如下(我自己瞎编的语句) UPDATE ABC_TAB set rows[2]column[3]="HELLO" 这样的语句方法么
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
引用 6 楼 doxob 的回复:
其实是用表是用select * from ABC_TAB 读出来的,然后再C# DATAGRIDVIEW中进行不定项更改,但是只能确定更改的行号和列号,然后再更改到原表中。
在程序中是不是更好处理?不放到数据库中处理。
doxob 2019-08-01
  • 打赏
  • 举报
回复
其实是用表是用select * from ABC_TAB 读出来的,然后再C# DATAGRIDVIEW中进行不定项更改,但是只能确定更改的行号和列号,然后再更改到原表中。
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
引用 4 楼 doxob 的回复:
[quote=引用 3 楼 二月十六 的回复:]
[quote=引用 2 楼 doxob 的回复:]
是的行号不是ID

这样的话,数据得有排序,不然行号没法确认是哪条数据[/quote]

如果不排序,就是默认顺序的能写SQL语句么
[/quote]不能,因为顺序会变。
doxob 2019-08-01
  • 打赏
  • 举报
回复
引用 3 楼 二月十六 的回复:
[quote=引用 2 楼 doxob 的回复:]
是的行号不是ID

这样的话,数据得有排序,不然行号没法确认是哪条数据[/quote]

如果不排序,就是默认顺序的能写SQL语句么
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
引用 2 楼 doxob 的回复:
是的行号不是ID
这样的话,数据得有排序,不然行号没法确认是哪条数据
doxob 2019-08-01
  • 打赏
  • 举报
回复
是的行号不是ID
二月十六 版主 2019-08-01
  • 打赏
  • 举报
回复
行号不是id,而是按照某个排序条件的第几行编号?

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧