Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 创建存储过程以修改行(若存在),若不存在,则将新行插入表中_Sql Server 2008_Tsql_Stored Procedures - Fatal编程技术网

Sql server 2008 创建存储过程以修改行(若存在),若不存在,则将新行插入表中

Sql server 2008 创建存储过程以修改行(若存在),若不存在,则将新行插入表中,sql-server-2008,tsql,stored-procedures,Sql Server 2008,Tsql,Stored Procedures,如何创建一个存储过程来根据Id和Name参数更新Std_课程的列,或者在Id和Name不存在的情况下插入新行 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.YourTa


如何创建一个存储过程来根据Id和Name参数更新Std_课程的列,或者在Id和Name不存在的情况下插入新行

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
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);
更新:因为您使用的是SQL Server 2008,所以还可以使用一个简单的
MERGE
语句-直接“内联”或在存储过程内部。它看起来像这样:

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
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);

不需要存储过程,只需使用
MERGE
@a\u horse\u和\u No\u名称:如果他在SQL Server 2008或更高版本上
MERGE
在2000年或2005年都不存在……@marc_s:如果有人没有提到这个版本,我认为它是当前版本。是的,它是SQL Server 2008