用于添加和编辑数据的SQL过程

时间:2014-06-26 18:52:20

标签: sql sql-server stored-procedures

我正忙着一本旧试卷,其中一个问题如下:

研究下表并回答以下问题:

 CREATE TABLE CARDHOLDERS(
    CH_ID INTEGER IDENTITY,
    CH_NAME VARCHAR(50),
    CH_SURNAME VARCHAR(50),
    CH_IDNUMBER CHAR(13),
    CH_CARDNUMBER CHAR(13),
    CH_STATUS CHAR(2),
    CH_CREATE_DATE DATETIME,
    CH_LAST_CHANGE_DATE DATETIME)

编写商店程序以添加或编辑持卡人信息。进行必要的验证检查以确保数据正确。

我的回答

Create Procedure add_ch (@CH_NAME, @CH_SURNAME...)
AS
BEGIN
INSERT INTO CARDHOLDERS VALUES (@CH_NAME, @CH_SURNAME...)
END

运行程序

EXECUTE add_ch ('Peter', 'Kemp')

我的问题

  • 上面添加cardholer的程序会给出正确的结果吗?
  • 问题要求'编写存储过程以添加或编辑 持卡人信息' 如何将添加程序与 编辑持卡人程序或我是否正确假设我可以 有不同的程序吗?

3 个答案:

答案 0 :(得分:0)

你在找这样的东西吗?

CREATE PROCEDURE add_ch (@CH_NAME , @CH_SURNAME...)
    AS
    BEGIN
    DECLARE @count   INT

    SET @count =
           (SELECT count (*)
              FROM CARDHOLDERS
             WHERE CH_NAME = @CH_NAME AND CH_SURNAME = @CH_SURNAME)

    IF @count = 0
       INSERT INTO CARDHOLDERS
       VALUES (@CH_NAME, @CH_SURNAME...)

    else Print'This user already exsit.'
    END

答案 1 :(得分:0)

尝试这样的事情。使用解码和参数设置默认值会有所帮助。

create or replace procedure add_ch
(
    CHID INTEGER := -1,
    CHNAME VARCHAR := '@',
    CHSURNAME VARCHAR := '@',
    CHIDNUMBER CHAR := '@',
    CH_CARDNUMBER CHAR := '@',
    CHSTATUS CHAR := '@',
    CHCREATE_DATE DATETIME := '01-Jan-1900',
    CHLAST_CHANGE_DATE DATETIME:= '01-Jan-1900'
)
as
begin
    update cardholders
    set    CH_NAME = decode( CHNAME,'@',CH_NAME,chname ),
           CH_SURNAME = decode( CHSURNAME,'@',CH_SURNAME, CHSURNAME),....
    where  CH_ID = CHID;

    if sql%notfound
    then
        insert into cardholders
        (
           CH_ID,
           CH_NAME,
           CH_SURNAME,
           CH_IDNUMBER,
           CH_CARDNUMBER,
           CH_STATUS,
           CH_CREATE_DATE,
           CH_LAST_CHANGE_DATE
        )
        values
        (
           CHID,
           CHNAME,
           CHSURNAME,
           CHIDNUMBER,
           CH_CARDNUMBER,
           CHSTATUS CHAR,
           CHCREATE_DATE,
           CHLAST_CHANGE_DATE
         );
end;

答案 2 :(得分:0)

首先您必须找到数据库表中的主键数据

如果 DBtable 中存在数据(具有当前主键值)

然后执行更新sql查询

<强>否则 执行插入查询。

使用您问题的上一个答案完成数据库检查。