Получить количество вставленных / обновленных / удаленных строк из хранимой процедуры - Linq to SQL - PullRequest
3 голосов
/ 16 июля 2010

Я вызываю хранимую процедуру, которая выполняет некоторые обновления / вставки / удаления (по одному за раз) из Linq. Эта хранимая процедура добавлена ​​в текстовый текст, который я использую. После вызова этой хранимой процедуры я хочу получить количество строк, затронутых этой хранимой процедурой. Эта хранимая процедура также может влиять на несколько таблиц.

Я попытался использовать метод GetChangeSet для datacontext, но он не возвращает количество затронутых строк для вставок / обновлений / удалений, выполненных в этой хранимой процедуре.

Я не хочу использовать @@ rowcount и возвращать этот rowcount в качестве возвращаемого значения.

Есть ли способ найти количество затронутых строк?

1 Ответ

3 голосов
/ 16 июля 2010

В вашей хранимой процедуре вы можете создать переменную таблицы (или временную таблицу, если переменные таблиц вам недоступны) и вставлять в нее @@ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...