[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
명세서 에 사용하기에 적합하지 않습니다 .
답변
당신은 할 수 있습니다
- 저장된 proc에서 결과 세트를 보유 할 테이블 변수를 작성한 후
- 저장된 proc의 출력을 테이블 변수에 삽입 한 다음
- 다른 테이블과 마찬가지로 테이블 변수를 사용하십시오 …
… sql ….
Declare @T Table ([column definitions here])
Insert @T Exec storedProcname params
Select * from @T Where ...
답변
당신도 찾는 테이블 반환 함수를 또는 임시 테이블로 EXEC를 삽입 :
INSERT INTO #tab EXEC MyProc
답변
OPENROWSET 및 OPENQUERY 에 대해 읽어야합니다.
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