SQL Server - SELECT FROM 저장 프로시저

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

CREATE PROCEDURE MyProc
AS
BEGIN
    SELECT * FROM MyTable
END

실제 프로시저는 조금 더 복잡하기 때문에 스프로크가 필요합니다.

이 프로시저를 호출하여 출력을 선택할 수 있나요?

SELECT * FROM (EXEC MyProc) AS TEMP

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

질문에 대한 의견 (3)

다음을 수행할 수 있습니다.

  1. 저장된 프로시저의 결과 집합을 보관할 테이블 변수를 결과 집합을 저장할 테이블 변수를 생성하고 그런 다음
  2. 저장된 프로시저의 출력을 저장된 프로시저의 출력을 테이블 변수에 삽입합니다, 그리고
  3. 테이블 변수를 를 다른 table...

... sql ....

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

좋은 기사 에런드 소마레스코트 의해 이걸봐 합니다.

이 기본적으로 사용 가능한 모든 옵션을 열거합니다 단축시킵니다 책정안.

해설 (3)
해결책

사용할 수 있습니다 (사용자 정의 함수] 1 또는 보기 대신 "라는 뜻이다.

여러 개의 결과 셋을 각각 고유의 스키마에는 절차를 반환할 수 있습니다. # 39 의 '선택' 을 사용하여 기술서임을 it& 적합하지 않습니다.

해설 (6)

테이블-값 함수]1를 원하거나 임시 테이블에 EXEC를 삽입합니다:

INSERT INTO #tab EXEC MyProc
해설 (1)

(Https://docs.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql? 보기 = sql server 검토완료 합니다 [ 오픈로스트 ] (2017년), [ 오픈케리 ] (https://docs.microsoft.com/en-us/sql/t-sql/functions/openquery-transact-sql? 보기 = sql server 2017년)

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

테이블 유형을 선언해야 합니다 같은 수의 열이 store 를 반환 절차를 포함하는 있다. 데이터 유형의 열은 테이블에 있는 열 유형 및 절차를 통해 반환되었습니다 동일해야 합니다.

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

그 결과를 삽입하려면 정의한 저장 프로시저 in your 테이블 유형

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

결국 테이블 유형 중에서 선택하면 됩니다

Select * from @MyTableType
해설 (3)

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

이건 내 솔루션이므로

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

Sp 를 템포라티 테이블뿐만 출력입니다 복사할 수 있습니다.

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
해설 (0)

& # 39 오픈케리 사용 및 베포 autoexec. 설정되었습니다 프마턴리 설정되었습니다 끄기도구;; & # 39 의 노카운트 설정되었습니다;;

이 시도하시겠습니까 샘플 코드:

SELECT top(1)*
FROM
OPENQUERY( [Server], 'SET FMTONLY OFF; SET NOCOUNT ON; EXECUTE  [database].[dbo].[storedprocedure]  value,value ')
해설 (0)

인라인 함수는 다음과 같이 있는 변환 테이블 되돌려줍니다 시도하시겠습니까 너회의 프로시저에서는 로그인하십시오.

6 098 {{{000}}}

정보기술 (it) 을 호출할 수 있습니다 다음

SELECT * FROM MyProc()

수도 있습니다 반군지역 매개 변수를 다음과 같이 작동합니다.

CREATE FUNCTION FuncName (@para1 para1_type, @para2 para2_type , ... ) 

정보기술 (it), 콜

SELECT * FROM FuncName ( @para1 , @para2 )
해설 (0)

39, & # 39, 데이터 ACCESS& 경우 거짓값,

EXEC sp_serveroption 'SQLSERVERNAME', 'DATA ACCESS', TRUE

이후

SELECT  *  FROM OPENQUERY(SQLSERVERNAME, 'EXEC DBNAME..MyProc @parameters')

작동하잖아.

해설 (0)

바람 조금 오픈로스트 함께 수 있습니다.

SELECT ...fieldlist...
FROM OPENROWSET('SQLNCLI', 'connection string', 'name of sp')
WHERE ...

이 때마다 SP, 여전히 전체 실행하십시오 물론이겠지

해설 (0)

단순성과 생각해서라도 할 때, 나는 시스템 스토레드 프로스트로이 &quot re 실행 가능한 sp_readerrorlog"; 데이터를 얻기 위해.

-----USING Table Variable
DECLARE @tblVar TABLE (
   LogDate DATETIME,
   ProcessInfo NVARCHAR(MAX),
   [Text] NVARCHAR(MAX)
)
INSERT INTO @tblVar Exec sp_readerrorlog
SELECT LogDate as DateOccured, ProcessInfo as pInfo, [Text] as Message FROM @tblVar

-----(OR): Using Temp Table
IF OBJECT_ID('tempdb..#temp') IS NOT NULL  DROP TABLE #temp;
CREATE TABLE #temp (
   LogDate DATETIME,
   ProcessInfo NVARCHAR(55),
   Text NVARCHAR(MAX)
)
INSERT INTO #temp EXEC sp_readerrorlog
SELECT * FROM #temp
해설 (0)

보기]1를 사용해야 할 것 같습니다. 뷰를 사용하면 쿼리를 테이블로 표현할 수 있으므로 뷰를 쿼리할 수 있습니다.

해설 (0)

예를 들어, 이는 서버의 경우 호출됨 세르베스 내가 어떻게 그것을했다.

EXEC sp_serveroption 'SERVERX', 'DATA ACCESS', TRUE;
DECLARE @CMD VARCHAR(1000);
DECLARE @StudentID CHAR(10);
SET @StudentID = 'STUDENT01';
SET @CMD = 'SELECT * FROM OPENQUERY([SERVERX], ''SET FMTONLY OFF; SET NOCOUNT ON; EXECUTE MYDATABASE.dbo.MYSTOREDPROC ' + @StudentID + ''') WHERE SOMEFIELD = SOMEVALUE';
EXEC (@CMD);

Exec () ',' 내가 이 협력했습니다 설명줄로 확인할 수 있는 '선택' 으로 교체, 명령행을 @CMD 복습하려면 시도하기 전에 명령을 실행할 수 있어! 그건 모두 사용할 수 있도록 적절한 수의 따옴표 적절한 위치에 있었다. -)

수 있는 사람이 됐으면 좋겠다 "고 말했다.

해설 (0)