2013-07-25 2 views
-3

저장 프로 시저 결과 집합의 모든 결과를 표시하지 않을 수 있습니까?T-SQL 저장 프로 시저 결과가 없음

이 경우 EXECSELECT 문이 모두 있습니다.

편집 : 내 문제를 조금 더 설명해 드리겠습니다.

EXEC 명령문은 ERP 및 MySQL 서버의 데이터를 SQL의 임시 테이블로 가져 오는 DTSRun을 수행합니다. 일단 데이터가 임시 테이블에 있으면. 병합 된 데이터를 다시 사용자에게 가져 오는 Select 문이 있습니다. 사용자는 전자 메일을 통해 실제 고객에게 전송하는 MS Access Database입니다. 고객 측의 웹 페이지 버튼을 통해 실행되는 "보고서 가져 오기"

고객이 DTS 출력을보고 싶지 않으므로 첫 번째 EXEC 문 결과 집합을 표시하지 않으려합니다.

그렇지 않으면 그냥 MS 액세스가 저장 프로 시저를 실행 한 다음 SELECT 문을 당깁니다.

내가하는 일을하는 데 더 좋은 10 가지 방법이 있습니다. 그러나 나는 여전히 그것을 실행하면서 EXEC 문장의 결과 집합을 어떻게 억제 할 것인지 알고 싶었다.

+1

실행 시점은 어떻게됩니까? 출력 매개 변수의 값이 필요합니까? 질문에 대한 동기를 설명하십시오. –

+1

"모든 결과 표시 안 함"은 결과가 전혀 없거나 데이터 행이없는 헤더 만 반환한다는 의미입니까? – PAC

+0

EXEC는 DTSRun을 실행하고 select는 DTSRun의 출력을 선택합니다. – Overseer10

답변

3
SET FMTONLY ON; 
GO 
EXEC sp_who; 

그러나 부작용과 이상한 문제가 있습니다. 예를 들어, 적어도 SQL Server 2012에서 프로 시저에 #temp 테이블이 있으면 잘못된 개체 이름 오류가 발생합니다. Erland Sommarskog goes into a lot more detail here (그냥 FMTONLY 페이지 검색).

DTSRun 호출의 출력을 억제하려고했는지 알지 못했지만 업데이트가 있으면 더 나은 대답은 저장 프로 시저에 플래그를 추가 한 다음 플래그 값에 따라 xp_cmdshell에 대한 NO_OUTPUT 인수 :

ALTER PROCEDURE dbo.Whatever 
    @SuppressDTSOutput BIT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    ... 

    IF @SuppressDTSOutput = 1 
    BEGIN 
    EXEC master..xp_cmdshell 'DTSRun.exe whatever', NO_OUTPUT; 
    END 
    ELSE 
    BEGIN 
    EXEC master..xp_cmdshell 'DTSRun.exe whatever'; 
    END 

    ... 
END 
GO 
+0

SQL Server 2000에 있습니다. SET FMTONLY ON으로 설정하면; EXEC 문은 적절하게 실행되지 않습니다. – Overseer10

+1

그런 다음 질문에 대한 자세한 내용을 제공하십시오 (또한 "적절하게 실행되지 않는"의미). –

1

당신은 SET FMTONLY ON Statememt

이없는 결과가 표시되지 않습니다을 발행 할 수 있습니다.

0

는 일반적으로 결과를 얻을 수있는 두 가지 방법이 저장 프로 시저에서

1) Select 문 2) OUTPUT 키워드

대부분의 편리한 방법 I은 일반적으로 표의 결과 OR 가변 (아래 예)에 열 값

DECLARE @REF_Tool_Property_Name VARCHAR (20) SELECT @REF_Tool_Property_Name = Tool_Property_Name FROM를 저장하는 사용 결과를 억제 Tool_Property WHERE Tool_Property_Name = @Member