(SQL数据库)我想创建一个存储过程来更新表中的数据

更新的列不确定,可能只更新一列也可能更新好几列。也可能是所有列(新手求解)我只有十分全给了... 更新的列不确定,可能只更新一列也可能更新好几列。也可能是所有列(新手求解)
我只有十分全给了
展开
 我来答
射手幽灵伊
2013-08-30 · TA获得超过2716个赞
知道大有可为答主
回答量:4955
采纳率:81%
帮助的人:1966万
展开全部
create procedure update_table ( @c_tbname varchar(128), -- 要更新的表名
@c_upcolname varchar(1000), -- 要更新的字段列表,以豆号隔开
@c_updata varchar(1000), -- 要更新的数据列表,以豆号隔开,要与相应的列一一对应
@c_id varchar(100) -- 要更新的关键字,没有关键字的不能更新
)
as
begin
declare @c_sql varchar(max)
declare @i_bcol int
declare @i_ecol int
declare @i_bdata int
declare @i_edata int
if @c_id is null or @c_id = ''
return
set @i_bcol= 1
set @i_bdata= 1
set @c_sql = ' update ' + @c_tbname + ' set '
set @i_ecol = charindex(',' , @c_upcolname , @i_bcol )
while @i_ecol > 0
begin
set @c_sql = @c_sql + substring( @c_upcolname,@i_bcol,@i_ecol - 1 ) + ' = '
set @i_edata= charindex(',' , @c_updata, @i_bdata)
set @c_sql = @c_sql + '''' + substring( @c_updata,@i_bdata,@i_edata- 1 ) + ''' ,'
set @i_bcol = @i_ecol + 1
set @i_ecol = charindex(',' , @c_upcolname , @i_bcol )
end

set @c_sql = @c_sql + substring( @c_upcolname,@i_bcol,len@c_upcolname) - 1 ) + ' = '
set @c_sql = @c_sql + '''' + substring( @c_updata,@i_bdata,len(@c_updata)- 1 ) + ''' '
set @c_sql = @c_sql + ' where id = ''' + @c_id + ''' '
exec ( @c_sql )
end
追问

就是这个表,比如说我只修改ShenQingId这一列的信息,也可能修改ShenQingId和Workshop的内容。

追答
创建存储过程后,根据实际情况运行存储过程就可以了.
比如要修改ShenQingId,调用存储过程
exec update_table('表名','ShenQingId','新的数据','要修改的数据的关键字')

修改ShenQingId和Workshop
exec update_table('表名','ShenQingId,Workshop','新的数据,Workshop新的数据','要修改的数据的关键字')
lewis0815
2013-08-30 · 超过11用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:32万
展开全部
你不确定更新的列 那传进来的参数都有些什么
追问

就是这个表,比如说我只修改ShenQingId这一列的信息,也可能修改ShenQingId和Workshop的内容。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式