행을 반환하는 저장 프로시저가 있습니다:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT * FROM MyTable
END
실제 프로시저는 조금 더 복잡하기 때문에 스프로크가 필요합니다.
이 프로시저를 호출하여 출력을 선택할 수 있나요?
예
SELECT * FROM (EXEC MyProc) AS TEMP
데이터를 페이지화하기 위해 SELECT TOP X
, ROW_NUMBER
및 추가 WHERE
절을 사용해야 하는데, 이러한 값을 매개 변수로 전달하고 싶지 않습니다.
다음을 수행할 수 있습니다.
... sql ....
Declare @T Table ([column definitions here])
Insert @T Exec storedProcname params
Select * from @T Where ...
(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')
테이블 유형을 선언해야 합니다 같은 수의 열이 store 를 반환 절차를 포함하는 있다. 데이터 유형의 열은 테이블에 있는 열 유형 및 절차를 통해 반환되었습니다 동일해야 합니다.
declare @MyTableType as table
(
FIRSTCOLUMN int
,.....
)
그 결과를 삽입하려면 정의한 저장 프로시저 in your 테이블 유형
Insert into @MyTableType
EXEC [dbo].[MyStoredProcedure]
결국 테이블 유형 중에서 선택하면 됩니다
Select * from @MyTableType
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
인라인 함수는 다음과 같이 있는 변환 테이블 되돌려줍니다 시도하시겠습니까 너회의 프로시저에서는 로그인하십시오.
6 098 {{{000}}}
정보기술 (it) 을 호출할 수 있습니다 다음
SELECT * FROM MyProc()
수도 있습니다 반군지역 매개 변수를 다음과 같이 작동합니다.
CREATE FUNCTION FuncName (@para1 para1_type, @para2 para2_type , ... )
정보기술 (it), 콜
SELECT * FROM FuncName ( @para1 , @para2 )
EXEC sp_serveroption 'SQLSERVERNAME', 'DATA ACCESS', TRUE
이후
SELECT * FROM OPENQUERY(SQLSERVERNAME, 'EXEC DBNAME..MyProc @parameters')
작동하잖아.
단순성과 생각해서라도 할 때, 나는 시스템 스토레드 프로스트로이 " 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
예를 들어, 이는 서버의 경우 호출됨 세르베스 내가 어떻게 그것을했다.
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 복습하려면 시도하기 전에 명령을 실행할 수 있어! 그건 모두 사용할 수 있도록 적절한 수의 따옴표 적절한 위치에 있었다. -)
수 있는 사람이 됐으면 좋겠다 "고 말했다.