从存储过程中获取插入/更新/删除的行数 - Linq到SQL

时间:2010-07-16 09:35:57

标签: c# linq-to-sql stored-procedures

我正在调用一个存储过程,它会从Linq执行一些更新/插入/删除(一次一个)。这个存储过程被添加到我正在使用的datacontext中。调用此存储过程后,我想获取受此存储过程影响的行数。此存储过程也可能影响多个表。

我尝试使用datacontext的GetChangeSet方法,但它不会返回在此存储过程中执行的插入/更新/删除的受影响行数。

我不想使用@@ rowcount并将该rowcount作为返回值返回。

有什么方法可以找到受影响的行数?

1 个答案:

答案 0 :(得分:3)

在您的存储过程中,您可以创建一个表变量(如果表变量不可用,则为临时表),并在影响表的行数的存储过程的每个部分之后将@@ rowcount插入其中,然后从表变量中选择作为商店过程中的最后一个操作。

例如

CREATE PROCEDURE myProc
AS
BEGIN
    DECLARE @ra TABLE
    (
        rowsAffected INT,
        queryName VARCHAR(50)
    )

    INSERT INTO sometable
    SELECT col1, col2
    FROM someothertable

    INSERT INTO @ra (rowsAffected, queryName) VALUES (@@ROWCOUNT, 'insert into sometable')

    DELETE FROM anothertable
    WHERE thingID = something

    INSERT INTO @ra (rowsAffected, queryName) VALUES (@@ROWCOUNT, 'delete from anothertable')

    SELECT rowsAffected, queryName
    FROM @ra
END

然后更新您的DBML,以便在Linq to SQL查询中可以使用这些行。