[sql] SQL Server-SELECT FROM 저장 프로 시저

행을 반환하는 저장 프로 시저가 있습니다.

CREATE PROCEDURE MyProc
AS
BEGIN
    SELECT * FROM MyTable
END

내 실제 절차는 조금 더 복잡하므로 sproc이 필요합니다.

이 절차를 호출하여 출력을 선택할 수 있습니까?

다음과 같은 것 :

SELECT * FROM (EXEC MyProc) AS TEMP

데이터를 페이징 하기 위해 SELECT TOP X, ROW_NUMBER및 추가 WHERE절 을 사용해야 하며 실제로 이러한 값을 매개 변수로 전달하고 싶지 않습니다.



답변

프로 시저 대신 사용자 정의 함수 또는 보기 를 사용할 수 있습니다 .

프로시 저는 각각 고유 한 스키마가있는 여러 결과 세트를 리턴 할 수 있습니다. SELECT명세서 에 사용하기에 적합하지 않습니다 .


답변

당신은 할 수 있습니다

  1. 저장된 proc에서 결과 세트를 보유 할 테이블 변수를 작성한 후
  2. 저장된 proc의 출력을 테이블 변수에 삽입 한 다음
  3. 다른 테이블과 마찬가지로 테이블 변수를 사용하십시오 …

… sql ….

Declare @T Table ([column definitions here])
Insert @T Exec storedProcname params
Select * from @T Where ...


답변

당신도 찾는 테이블 반환 함수를 또는 임시 테이블로 EXEC를 삽입 :

INSERT INTO #tab EXEC MyProc


답변

OPENROWSETOPENQUERY 에 대해 읽어야합니다.

SELECT  *
INTO    #tmp FROM
OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters')


답변

스토어드 프로 시저가 리턴하는 동일한 수의 컬럼을 포함하는 테이블 유형을 선언해야합니다. 테이블 유형의 컬럼 데이터 유형과 프로 시저가 리턴 한 컬럼은 동일해야합니다.

declare @MyTableType as table
(
FIRSTCOLUMN int
,.....
)  

그런 다음 방금 정의한 테이블 유형에 스토어드 프로 시저 결과를 삽입해야합니다.

Insert into @MyTableType
EXEC [dbo].[MyStoredProcedure]

결국 테이블 유형에서 선택하십시오.

Select * from @MyTableType


답변

임시 테이블을 사용할 필요는 없습니다.

이것은 나의 해결책이다

SELECT  *  FROM
OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters')
WHERE somefield = anyvalue


답변

sp에서 temporaty 테이블로 출력을 복사 할 수 있습니다.

CREATE TABLE #GetVersionValues
(
    [Index] int,
    [Name]  sysname,
    Internal_value  int,
    Character_Value sysname
)
INSERT #GetVersionValues EXEC master.dbo.xp_msver 'WindowsVersion'
SELECT * FROM #GetVersionValues
drop TABLE #GetVersionValues