2013-02-06 3 views
4

У меня есть различные хранимые процедуры. Мне нужна хранимая процедура для выполнения хранимой процедуры, а затем возвращаю только количество строк (количество возвращенных строк вызываемой процедурой), и мне нужно получить ее в коде C#.Количество строк хранимой процедуры из другой хранимой процедуры

Каков наилучший способ для этого?

Ситуация: У меня есть различные хранимые процедуры, которые вызывается из кода C#. Теперь для другой цели мне нужно знать количество строк, возвращаемых процедурой (я не хочу возвращенных строк, мне просто нужно количество строк). Я не могу изменить самую хранимую процедуру, поскольку многие из моих кодов C# используют их, поэтому все может порвать, если я изменю процедуры. Вот почему я блокирую процедуру, которая будет принимать входные данные и выполнять процедуру (динамически) и возвращать количество строк, но не результат или строки.

я мог бы хранимую процедуру строку и выполнить ее, как

EXEC ('SearchWallpaper @Keyword = ''' + @Key + '''') 

У меня Id в качестве столбца в каждой возможной возвращаемой строке. Я мог бы хранить идентификаторы и считать это, но я не знаю, что, если это лучшая идея.

Моя база данных довольно большая. Я мог бы использовать executeenonquery() в C#, но он возвращает -1, когда я выполняю какую-либо хранимую процедуру с ним. Каков наилучший способ. Спасибо.

ответ

2

Предполагая, что вы используете SQL Server (что возможно из фрагментов кода), возможно, что-то подобное будет работать для вас:

exec('exec <your stored procedure goes here>; select @@RowCount') 

Поскольку вы работаете SQL Server, я могу думать об одном решении, что не обязательно симпатичный.

Создайте временную таблицу (переменную таблицы, если у вас более новая версия SQL Server). Затем выполните:

exec(` 
declare @t table (
    <columns go here> 
); 

insert into @t 
    exec(''<your exec here>''); 

select @rowcount 
'); 

И теперь, когда я сказал, что я бы рекомендовал sp_executesql. Это звучит примерно так:

declare @sql nvarchar(max) = N'exec '[email protected] + '; set @RowCount = @@RowCount'; 

exec sp_executesql @sql, N'@RowCount int output', @RowCount = RowCount output; 

Я провел большую часть вчерашнего дня отладки тайного состояния, которое возникает при вызове хранимой процедуры внутри вставки.

+1

+1 Для '@ @ rowcount' ... но он, кажется, указывает, что он хочет каким-то образом подавить набор результатов, возвращаемый вызываемой хранимой процедурой. –

+0

, но он также возвращает мне строки. и на messeges я видеть 385 строк, затронутых затем снова 1 ряд пострадавших нет студийного управления сервером – dnisml

+0

не есть способ, чтобы иметь один столбец из результата, возвращаемого хранимой процедурой .. как select id from exec 'хранимая процедура' – dnisml

0

Вы можете попробовать это в вашем ребенка хранимой процедуры:

CREATE PROC PawanXX 
(
@a INT 
,@b INT OUTPUT 
) 
AS 
BEGIN 

SELECT TOP 2 * FROM X 

SET @b = @@ROWCOUNT 

RETURN @b 

END 
GO 

Основной хранимая процедура, где мы называем все другие СФС

DECLARE @RC int 
DECLARE @a int 
DECLARE @b int 

EXECUTE @RC = [dbo].[PawanXX] 
    @a 
    ,@b OUTPUT 

SELECT @RC 

Выход за тот же ProcessName Родитель Ребенок


ShareDrafts JOB12 Job03 ShareDrafts Job13 Job58

(2 строки (ы) пострадавших)


(1 строка (ы) пострадавших)