복붙노트

[SQL] 테이블 출력 매개 변수를 사용하여 저장 프로 시저를 만들 수 없습니다

SQL

테이블 출력 매개 변수를 사용하여 저장 프로 시저를 만들 수 없습니다

이 코드를 가지고 :

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetProfitDeals]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetProfitDealsVar2]
GO

IF EXISTS(SELECT 1 FROM sys.types WHERE name = 'TableOrderType' AND is_table_type = 1 AND SCHEMA_ID('dbo') = schema_id)
DROP TYPE [dbo].[TableOrderType];

CREATE TYPE TableOrderType AS TABLE(
    Order_ID int NOT NULL,
    Order_AccNumber int NOT NULL,
    Order_OpenDate datetime NULL,
    Order_CloseDate datetime NULL,
    Order_Profit float NULL
);
GO

CREATE PROCEDURE [dbo].[GetProfitDeals](@OpenDate datetime = NULL, @CloseDate datetime  = NULL, @MinProfit float = NULL, @out TableOrderType OUTPUT READONLY)
AS
    INSERT INTO @out
    SELECT * FROM [Orders]
    WHEN [Orders].[OpenDate] >= @OpenDate
GO

하지만 "건설에 대한 구문이 잘못되었습니다 'READONLY'의"오류가 발생합니다. 나는이 문제를 해결할 수있는 방법, 나 때문에 정말 출력 테이블 매개 변수가 필요합니다.

해결법

  1. ==============================

    1.표 매개 변수는 읽기 전용입니다. 당신은 그들로 선택할 수 없습니다. 사용 테이블 반환 매개 변수 :

    표 매개 변수는 읽기 전용입니다. 당신은 그들로 선택할 수 없습니다. 사용 테이블 반환 매개 변수 :

    그리고 매개 변수 테이블 반환 :

    읽기 배열과 대안에 대한 포괄적 인 논의를위한 SQL Server의 나열합니다.

  2. ==============================

    2.레무스 상태로, 당신은 정확하게 그렇게 할 수 있지만 대신 사용자 정의 기능을 사용하여 달성하고자하는 것을 달성 할 수있다 : TSQL 함수 또는 저장 프로 시저에서 테이블을 반환

    레무스 상태로, 당신은 정확하게 그렇게 할 수 있지만 대신 사용자 정의 기능을 사용하여 달성하고자하는 것을 달성 할 수있다 : TSQL 함수 또는 저장 프로 시저에서 테이블을 반환

    형태로 정의 난 당신이 기능에 테이블을 정의하지해야합니다 생각하지만 테이블에 데이터를 반환하는

  3. from https://stackoverflow.com/questions/19270727/cant-create-stored-procedure-with-table-output-parameter by cc-by-sa and MIT license