2012-06-18 4 views
3

enter image description hereСоздать хранимую процедуру, чтобы изменить строку, если она существует, и вставить новую строку в таблицу, если оно не

Как я могу создать хранимую процедуру для обновления столбца в Std_Course, основываясь на Id и параметре Name, или вставляет новое строка, если идентификатор и имя не существует

+1

Нет необходимости в хранимой процедуре, просто используйте 'MERGE' –

+0

@a_horse_with_no_name: то есть ** ЕСЛИ ** он на SQL Server 2008 ** ** или более поздней версии ... 'MERGE' не существует в 2000 или 2005 годах. –

+0

@marc_s: если кто-то не упоминает версию, я предполагаю, что она является текущей. –

ответ

2

Попробуйте что-то вроде этого:

CREATE PROCEDURE dbo.proc_InsertOrUpdate 
    @ID INT, @Name VARCHAR(50), @StdCourse INT 
AS 

    IF EXISTS (SELECT * FROM dbo.YourTable WHERE ID = @ID AND Name = @Name) 

     UPDATE dbo.YourTable 
     SET Std_course = @StdCourse 
     WHERE ID = @ID AND Name = @Name 

    ELSE  

     INSERT INTO dbo.YourTable(ID, Name, Std_Course) 
     VALUES(@ID, @Name, @StdCourse 

Update: поскольку вы на SQL Server 2008, вы можете также использовать простой MERGE улица atement - либо непосредственно «inline», либо внутри хранимой процедуры. Это будет выглядеть примерно так:

CREATE PROCEDURE dbo.proc_InsertOrUpdate 
    @ID INT, @Name VARCHAR(50), @StdCourse INT 
AS 
    MERGE dbo.YourTable AS t 
    USING (SELECT @ID, @Name, @StdCourse) AS Source(ID, NAME, Std_Course) 
    ON source.ID = t.ID AND source.Name = t.Name 

    WHEN MATCHED THEN 
     UPDATE SET Std_Course = @StdCourse 

    WHEN NOT MATCHED THEN 
     INSERT(ID, Name, Std_Course) 
     VALUES(source.ID, source.Name, source.Std_Course); 
Смежные вопросы