我有一个存储过程,是用来更新数据库的,大致如:CREATE PROC P_CO
@ID NCHAR(4),@NAME NVARCHAR(20)
AS
BEGIN-- @ID 为唯一不重复的主键
-- 判断@ID是否存在,若不存在则INSERT;荐存在则UPDATE
-- 请问该如何操作,急!非常感谢!INSERT [TB] SELECT @ID,@NAME
UPDATE [TB] SET ID=@ID,NAME=@NAME
END
GO

解决方案 »

  1.   

    CREATE PROC P_CO
    @ID NCHAR(4),@NAME NVARCHAR(20)
    AS
    BEGIN-- @ID 为唯一不重复的主键
    -- 判断@ID是否存在,若不存在则INSERT;荐存在则UPDATE
    -- 请问该如何操作,急!非常感谢!
    if not exists (select 1 from [TB] where id=@id)
    INSERT [TB] SELECT @ID,@NAME
    else
    UPDATE [TB] NAME=@NAME where ID=@IDEND
    GO
      

  2.   

    or(可能简洁点):
    CREATE PROC P_CO
    @ID NCHAR(4),@NAME NVARCHAR(20)
    AS
    BEGIN-- @ID 为唯一不重复的主键
    -- 判断@ID是否存在,若不存在则INSERT;荐存在则UPDATE
    -- 请问该如何操作,急!非常感谢!UPDATE [TB] NAME=@NAME where ID=@IDINSERT [TB] SELECT @ID,@NAME
    where not exists (select 1 from [TB] where id=@id)
    END
    GO
      

  3.   

    有没有必要多传入一个值来区分是插入还是更新即:
    CREATE PROC P_CO
    @ID NCHAR(4),@NAME NVARCHAR(20),@BOOL_OP INT
    AS
    BEGIN-- @BOOL_OP
    -- 1:插入
    -- 0:更新
    IF @BOOL_OP=1
    INSERT [TB] SELECT @ID,@NAME
    ELSE
    UPDATE [TB] NAME=@NAME where ID=@IDEND
    GO
      

  4.   

    直接这样:
    create procedure P_CO
      @Id nchar(4),
      @Name nvarchar(20)
    as
    begin
      if exists(select 1 from tb where [Id] = @Id)
        update tb set [Name] = @Name
      else
        insert into tb([Id], [Name]) select @Id, @Name
    end
      

  5.   

    没有必要在传一个参数进来了,除非你在调用这个过程之前就已经确定是插入还是更新。
    你上面写那个if else的过程已经够用了呀。
      

  6.   

    delete tb where id=@id
    insert tb(id,name) vaules (@id,@name)
      

  7.   

    晕哦
    @BOOL_OP参数纯属多于
    你有BOOL_OP参数的值都不必写存储过程了,直接判断执行一个语句就可以了BOOL_OP参数当作传出参数还差不多
      

  8.   

    CREATE PROC P_CO
    @ID NCHAR(4),@NAME NVARCHAR(20)
    AS
    BEGIN-- @ID 为唯一不重复的主键
    -- 判断@ID是否存在,若不存在则INSERT;荐存在则UPDATE
    -- 请问该如何操作,急!非常感谢!UPDATE [TB] NAME=@NAME where ID=@ID
    if @@rowcount !=1 
    insert into [tb] select @id,@name END
    GO
      

  9.   

    我就是不想在程序中写INSERT、UPDATE语句(我是做WINFORM数据库管理程序的)当然我知道用户是点新增按钮还是编辑按钮,写成存储过程可能好一点吧?主从表就不知道怎么搞了,单表应该很容易。