2013-02-06 2 views
4

다양한 저장 프로 시저가 있습니다. 스토어드 프로 시저를 실행하기 위해 스토어드 프로 시저가 필요하고 행 수 (호출 된 프로 시저에 의해 리턴 된 행 수) 만 리턴하고 C# 코드로 수신해야합니다.다른 저장 프로 시저의 저장 프로 시저 행 수

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

상황 : C# 코드에서 호출되는 다양한 저장 프로 시저가 있습니다. 이제 다른 목적을 위해 프로 시저에 의해 반환 된 행의 수를 알아야합니다 (반환 된 행을 원하지 않습니다. 행 수가 필요합니다). 내 C# 코드 중 많은 수가 저장 프로 시저 자체를 변경할 수 없으므로 프로 시저를 변경하면 문제가 발생할 수 있습니다. 그래서 필자는 입력을 받아서 (동적으로) 프로 시저를 실행하고 결과 또는 행이 아닌 행의 수를 반환하는 프로 시저를 잠그고 있습니다.

나는 프로 시저 문자열 를 저장하고 각 가능한 반환 행의 열 나는 이드가

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

처럼 실행 걸릴 수 있습니다. ID를 저장하고 계산할 수는 있지만 최선의 아이디어가 무엇인지는 알 수 없습니다.

데이터베이스가 꽤 큽니다. C#에서 executenonquery()를 사용할 수는 있지만 저장 프로 시저를 실행할 때 -1이 반환됩니다. 가장 좋은 방법은 뭔가요. 고맙습니다.

답변

2

당신이 (코드 조각에서 가능하다) SQL Server를 사용하는 가정이 같은 아마 무언가가 당신을 위해 일 것입니다 : 당신이 SQL Server를 실행하고 있기 때문에

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

, 나는 하나 개의 솔루션을 생각할 수 반드시 예쁘지는 않습니다.

임시 테이블 (SQL Server의 최신 버전을 사용하는 경우 테이블 변수)을 만듭니다. 내가 sp_executesql를 추천 것이라고 말한 것을 지금

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

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

select @rowcount 
'); 

을 그리고 그런 다음 실행합니다. 이것은 이런 식입니다 :

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

저장 프로 시저에 의해 반환되는 결과로부터 단일 열을 할 방법이 없다 영향 영향 exec 'stored procedure'에서 ID를 선택하십시오. – dnisml

0

당신은 당신의 자녀 저장 프로 시저이 시도 할 수 있습니다 :

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

SELECT TOP 2 * FROM X 

SET @b = @@ROWCOUNT 

RETURN @b 

END 
GO 

을 주요 저장 프로 시저 우리는 다른 모든 SPS

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 행 (들))


2

(영향 1 행 (들)) '옵션