当前位置:编程学习 > C#/ASP.NET >>

如何写这样一个存储过程(菜鸟提问)

各位大侠,小弟现在遇到点困难。以往写存储过程都是吧增、删、改分三个存储过程来写,但现在要求一个功能实现这三个功能。请问怎么实现好呢?参数怎么设置好?还请大侠们指教了 --------------------编程问答-------------------- 如果要分三个存储过程就不用写存储过程了,存储过程就是为了同时实现这三个过程设计的.建议看看存储过程的例子.
把sql语句写到begin和end中间用";"阁开. --------------------编程问答-------------------- 多谢,请问你有没有一些例子参考?
那调用删除的时候那些多余的参数怎么处理呢? --------------------编程问答-------------------- 你可以用一个标记位来实现

 if(@tag='delete')
  begin
    --do something
  end
 ...............
  
--------------------编程问答-------------------- 那假设我为新建和修改设置了很多参数。但删除的时候实际上只需要ID就可以。
那么在调用这个存储过程的时候,其他参数的文字怎么填写呢? --------------------编程问答-------------------- 那就再多设一个标志参数,

根据这个参数来判断是执行增删改! --------------------编程问答-------------------- 其他参数可以给默认值,不过不给应该没异常的! --------------------编程问答-------------------- 把参数设置个默认值,删除的时候不传就可以了
--------------------编程问答-------------------- 大概明白了。我去试试,可以就结贴。多谢 --------------------编程问答-------------------- 设置一个标记字段   
    
  create   prc   名字   
  @acttype   nvarchar(5)   
  @--其他参数   
  as     
    
  if   @acttype   ='A'--增加   
  begin     
    
  end   
  if   @acttype   ='M'--修改 

 -------   --------------------编程问答-------------------- 按楼上的方法,那每次掉用的时候是不是所有的参数都需要列出来?
但在删除操作里面是不需要其他参数的。只需要@acttype 和@id就可以了啊
不填其他参数的话,调用就报错啊。 --------------------编程问答-------------------- 有必要做成一个存储过程吗?
我觉得反而麻烦了,而且传递过来的参数不同的操作时也有很多时多余的
觉得做一个存储过程的要求有点变态.
一个方法只负责一件事这是很基本的原则 --------------------编程问答--------------------
引用 10 楼 xhyaoly1982 的回复:
按楼上的方法,那每次掉用的时候是不是所有的参数都需要列出来? 
但在删除操作里面是不需要其他参数的。只需要@acttype 和@id就可以了啊 
不填其他参数的话,调用就报错啊。



参数有没有设默认值?
这种格式:@aa varchar(10) = null --------------------编程问答--------------------
引用 11 楼 jian_xiaowei 的回复:
有必要做成一个存储过程吗? 
我觉得反而麻烦了,而且传递过来的参数不同的操作时也有很多时多余的 
觉得做一个存储过程的要求有点变态. 
一个方法只负责一件事这是很基本的原则


顶11楼的说法 --------------------编程问答-------------------- 一个存储过程一个功能觉得更好维护 而且看起来也清晰简洁 --------------------编程问答-------------------- 传一个参数来判断好了,如
@Opearte  NVARCHAR(10)

IF (@Opearte = 'ADD')
BEGIN
  .....
END

IF (@Opearte = 'UPDATE')
BEGIN
  .....
END

IF (@Opearte = 'DELETE')
BEGIN
  .....
END --------------------编程问答-------------------- 先设置好三个方法公用参数,然后所各自己所需要的其它参数列上去,再加上一个方法识别参数
这样只用一个存储过程就OK了
调用的时候,没用的参数传空值就可以了

@id varchar(10)     --公用
@taa001 varchar(10) --添加所需参数
@taa002 varchar(10) --删除...
@taa003 varchar(10) --修改...
@sort varchar(10)   --'add','update','delete'
as
    --Add

    --Delete

    --Amend --------------------编程问答-------------------- 感觉不好弄 --------------------编程问答-------------------- 我个人觉得参数很多情况下会比较麻烦的,参数少的话可以考虑写在一个过程里面,看情况了 --------------------编程问答-------------------- @Opearte  NVARCHAR(10) 

IF (@Opearte = 'ADD') 
BEGIN 
  ..... 
END 

IF (@Opearte = 'UPDATE') 
BEGIN 
  ..... 
END 

IF (@Opearte = 'DELETE') 
BEGIN 
  ..... 
END --------------------编程问答-------------------- 楼主啊,干脆你把存储过程语句COPY到这里来,大家一起帮你改改就OK了,直接代码让人看得爽! --------------------编程问答-------------------- 把代码贴出来撒 --------------------编程问答-------------------- 这是一个不好的需求 --------------------编程问答--------------------
引用 11 楼 jian_xiaowei 的回复:
有必要做成一个存储过程吗? 
我觉得反而麻烦了,而且传递过来的参数不同的操作时也有很多时多余的 
觉得做一个存储过程的要求有点变态. 
一个方法只负责一件事这是很基本的原则
--------------------编程问答-------------------- 设置一个标记字段
这个标记字段就是你的参数delete,insert,update
当你在做增的时候就将变量赋值为存储过程名.acttype="insert";最好是换成A替代 --------------------编程问答-------------------- zc --------------------编程问答-------------------- 该说的上面的都说了,
只示范一下
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE sp_name
-- Add the parameters for the stored procedure here
@id int, 
@code varchar(20),
@name varchar(20),
@type varchar(20)
AS
BEGIN
SET NOCOUNT ON;
IF(@type='add')
BEGIN
INSERT INTO TABLENAME ([code],[name]) 
VALUES(@code,@name)
END
IF(@type='update')
BEGIN
UPDATE TABLENAME
SET
[code]=@code,
[name]=@name
WHERE
[ID]=@id
END
IF(@type='del')
BEGIN
DELETE FROM TABLENAME WHERE ID=@id
END
ELSE
BEGIN
...
END
END
GO
--------------------编程问答-------------------- 都是很好的建议! 值得学习 --------------------编程问答-------------------- --------------------编程问答-------------------- 哪有这样设计的呀 --------------------编程问答-------------------- 嗯 ,是对的!!!! --------------------编程问答--------------------
引用 3 楼 liuyun1987 的回复:
你可以用一个标记位来实现 

SQL code
 if(@tag='delete')
  begin
    --do something
  end
 ...............
  



up --------------------编程问答-------------------- it isn't necessary, if you do want to do so, may you pass two parameters, first for indicator, other
parameters packed to one as the second. in you stored procedure, unpack them. --------------------编程问答-------------------- 这样做可以让人觉得你编程"牛"B啊~~
我觉得没这个必要,程序可以读性也会"低"点;
也不见得可以减少计算机的工作量.
--------------------编程问答-------------------- 呵呵不错 --------------------编程问答-------------------- 找本有关数据库的书就知道了。。 --------------------编程问答-------------------- 26楼真有职业道德啊,
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,