写一个存储过程来更新一张表或者多张。
例:
create proc aaa
@a varchar(**),
@b varchar(**),
@c varchar(**),
@d varchar(**),
@e varchar(**)
as
------------------------
我有时候要更新所有这些参数所对应的列,有时候又只要更新@a,@b;
或者其他的部分参数。
那么我该怎么写 前台如果不给不需要更新的参数赋值又要报错,赋,我又不知道赋什么,因为我不要更新那些字段。
------------------------
我想两个办法来做
1:就是规定一个特殊值,存储过程中,判断传进的参数=特殊值,就不拼这个参数,
如果不等于则拼接起来。最后执行拼接后的整条语句。
这个方法,用是可用但是好象不能防止注入式攻击。
2:就是规定一个特殊值,存储过程中,判断传进的参数=特殊值,直接update set这个参数。这样的话我的参数又多没次update 的次数也越多,效率就是问题了。
怎么办?
------------------------
牛人不知道看懂没,有没办法不拼语句,然后又能判断的update,或者某个特殊值在数据库本身就不不更新?
例:
create proc aaa
@a varchar(**),
@b varchar(**),
@c varchar(**),
@d varchar(**),
@e varchar(**)
as
------------------------
我有时候要更新所有这些参数所对应的列,有时候又只要更新@a,@b;
或者其他的部分参数。
那么我该怎么写 前台如果不给不需要更新的参数赋值又要报错,赋,我又不知道赋什么,因为我不要更新那些字段。
------------------------
我想两个办法来做
1:就是规定一个特殊值,存储过程中,判断传进的参数=特殊值,就不拼这个参数,
如果不等于则拼接起来。最后执行拼接后的整条语句。
这个方法,用是可用但是好象不能防止注入式攻击。
2:就是规定一个特殊值,存储过程中,判断传进的参数=特殊值,直接update set这个参数。这样的话我的参数又多没次update 的次数也越多,效率就是问题了。
怎么办?
------------------------
牛人不知道看懂没,有没办法不拼语句,然后又能判断的update,或者某个特殊值在数据库本身就不不更新?
-----------------------------
不懂 麻烦说详细点
up
说的是 只是我在寻求更好的解决办法。
-----------------------------
keystudio(御剑乘风来,除魔天地间,有酒乐逍遥,无酒我亦颠) ( ) 信誉:100
我还要去把所有的值都取出来 我多郁闷啊
create proc aaa
@a varchar(**),
@b varchar(**),
@c varchar(**),
@d varchar(**),
@e varchar(**)
as
begin
update 表
set
a=isnull(@a,a),
b=isnull(@b,b),
c=isnull(@c,c),
d=isnull(@d,d),
e=isnull(@e,e),
f=isnull(@f,f)
end
go
if @a <> 'null'
set @sql = @sql + ' declare @a varchar(1000) set @a = '+@a
if @b <> 'null'
set @sql = @sql + ' declare @b varchar(1000) set @b = '+@b
......exec(@sql)
最后拼出带参数的SQL语句执行 楼主试试
========================
这个方法好!
@a varchar(**)=null,
@b varchar(**)=null,
@c varchar(**)=null,
@d varchar(**)=null,
@e varchar(**)=null
as
可以吗,在后台不更新的数据也要付null值
----------------------
libin_ftsafe(子陌红尘:TS for Banking Card) ( ) 信誉:100
----------------------
elvis_gao() ( ) 信誉:100
----------------------
create proc aaa
@a varchar(**)=null,
@b varchar(**)=null,
@c varchar(**)=null,
@d varchar(**)=null,
@e varchar(**=null)
as
begin
update 表
set
a=isnull(@a,a),
b=isnull(@b,b),
c=isnull(@c,c),
d=isnull(@d,d),
e=isnull(@e,e),
f=isnull(@f,f)
end
go
---------------------
这样在前台不给某些参数传值也可以,因为默认了。
---------------------
结贴啦