| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1021 人关注过本帖
标题:SQL2000存储过程UPDATE实现参数随意个数?
取消只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
结帖率:98.98%
收藏
已结贴  问题点数:5 回复次数:3 
SQL2000存储过程UPDATE实现参数随意个数?
你们有没这样的存储过程,正常情况下,1个表很多字段,比如20个字段,但有时候,只更新其中的15个,有时候,只更新其中的17个?如果次次都按参数的个数来写1个过程,那就很多个了。于是,我就想,有没有存储过程,可以实现,随便个数的参数的,就出现以下的了。。
ALTER PROCEDURE [dbo].[update_stuMarks]
@stu_name char(10)=null,
@stu_age int=null,
@stu_sex char(10)=null,
@res int output
AS
declare @set_str char(250)
declare @where_str char(250)
declare @sql_str char(500)
set @set_str=null
if @stu_name is not null
begin
   if @set_str is null
      set @set_str='stu_name='+ltrim(rtrim(@stu_name))
   else
      set @set_str='stu_name='+ltrim(rtrim(@stu_name))+','+ltrim(rtrim(@set_str))
end
if @stu_sex is not null
begin
   if @set_str is null
      set @set_str='stu_sex='+ltrim(rtrim(@stu_sex))
   else
      set @set_str='stu_sex='+ltrim(rtrim(@stu_sex))+','+ltrim(rtrim(@set_str))
end
if @stu_age is not null
begin
   if @set_str is null
      set @set_str='stu_age='+ltrim(rtrim(@stu_age))
   else
      set @set_str='stu_age='+ltrim(rtrim(@stu_age))+','+ltrim(rtrim(@set_str))
end
if @set_str is null
   set @res=-1
else
begin
   set @sql_str='update stuMarks set '+ @set_str
   exec(@sql_str)
   set @res=1
end
--select @res,@set_str
GO

declare @res1 int
declare @stu_name char(10)
declare @stu_sex char(10)
declare @stu_age int

set @stu_name=30
set @stu_sex=20
set @stu_age=10
exec update_stuMarks @stu_name=@stu_name,@res=@res1 output
--exec update_stuMarks @stu_name=@stu_name,@stu_sex=@stu_sex,@res=@res1 output
--exec update_stuMarks @stu_name=@stu_name,@stu_sex=@stu_sex,@stu_age=@stu_age,@res=@res1 output

select * from stuMarks

这样的方法可以吗?实用不?


[ 本帖最后由 mywisdom88 于 2015-7-7 17:39 编辑 ]
搜索更多相关主题的帖子: null 
2015-07-07 17:29
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
另外,能不能把运行,红字的,是否正取运行返回给@res,我用 set @res= exec(@sql_str)出错,不知道怎么用。。
if @set_str is null
    set @res=-1
else
 begin
    set @sql_str='update stuMarks set '+ @set_str
    exec(@sql_str)
    set @res=1
 end


[ 本帖最后由 mywisdom88 于 2015-7-7 17:38 编辑 ]
2015-07-07 17:37
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
多了个WHERE,,,,,
ALTER PROCEDURE [dbo].[update_stuMarks]
@stu_name char(10)=null,
@stu_age int=null,
@stu_sex char(10)=null,
@stu_where char(250)=null,
@res int output
AS

declare @set_str char(250)
declare @where_str char(250)
declare @sql_str char(500)
set @set_str=null
set @where_str=null

if @stu_name is not null
begin
   if @set_str is null
      set @set_str='stu_name='+ltrim(rtrim(@stu_name))
   else
      set @set_str='stu_name='+ltrim(rtrim(@stu_name))+','+ltrim(rtrim(@set_str))
end

if @stu_sex is not null
begin
   if @set_str is null
      set @set_str='stu_sex='+ltrim(rtrim(@stu_sex))
   else
      set @set_str='stu_sex='+ltrim(rtrim(@stu_sex))+','+ltrim(rtrim(@set_str))
end

if @stu_age is not null
begin
   if @set_str is null
      set @set_str='stu_age='+ltrim(rtrim(@stu_age))
   else
      set @set_str='stu_age='+ltrim(rtrim(@stu_age))+','+ltrim(rtrim(@set_str))
end

 
if @set_str is null
   set @res=-1
else
begin
   if @stu_where is null
      set @sql_str='update stuMarks set '+ @set_str
   else
      set @sql_str='update stuMarks set '+ @set_str  +' where '+@stu_where
   exec(@sql_str)
   set @res=1
end
--select @res,@set_str

GO

declare @res1 int
declare @stu_name char(10)
declare @stu_sex char(10)
declare @stu_age int
declare @sql_where char(250)

set @stu_name=20
set @stu_sex=20
set @stu_age=20
set @sql_where=' stu_no=2'
exec update_stuMarks @stu_name=@stu_name,@stu_sex=@stu_sex,@stu_age=@stu_age,@stu_where=@sql_where,@res=@res1 output

select * from stuMarks

select @res1
2015-07-07 18:04
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
知道了,我用存储过程,主要是想在插入数据的时候,先检查,要是没这个记录,才插入。
我在存储过程那里,有检查语句,有返回值,
要是VFP直接写语句,那就要写查询语句,和插入语句,要执行2次,要是用SCAN ..ENDSACN来插入多条数据,不知道是用存储过程快还是VFP直接语句快。
我晚上测试看看。
我上面的语句,是可以执行的,我只是在问,这方法的可行性。。上面是UPDATE,其实,我们目的是INSERT的,只是UPDATE比较容易测试
2015-07-08 15:44
快速回复:SQL2000存储过程UPDATE实现参数随意个数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033809 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved