我正在调用一个存储过程,它会从Linq执行一些更新/插入/删除(一次一个)。这个存储过程被添加到我正在使用的datacontext中。调用此存储过程后,我想获取受此存储过程影响的行数。此存储过程也可能影响多个表。
我尝试使用datacontext的GetChangeSet方法,但它不会返回在此存储过程中执行的插入/更新/删除的受影响行数。
我不想使用@@ rowcount并将该rowcount作为返回值返回。
有什么方法可以找到受影响的行数?
答案 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查询中可以使用这些行。