사례 문은 고유하게 컴파일된 저장 프로시저에서 지원되지 않습니다. 다음 샘플에서는 고유하게 컴파일된 저장 프로시저에서 사례 문의 기능을 구현하는 방법을 보여줍니다.
샘플은 테이블 변수를 사용하여 제한된 수의 행을 처리할 때 적합한 단일 결과 집합을 생성합니다. 이는 데이터 행의 추가 복사본을 생성하기 때문입니다.
이 해결 방법의 성능을 테스트하여 애플리케이션에서 예상대로 작동하는지 확인해야 합니다.
-- original query
SELECT
SalesOrderID,
CASE (OnlineOrderFlag)
WHEN 1 THEN N'Order placed online by customer'
ELSE N'Order placed by sales person'
END
FROM Sales.SalesOrderHeader_inmem
-- workaround for CASE in natively compiled stored procedures
-- use a table for the single resultset
CREATE TYPE dbo.SOHOnlineOrderResult AS TABLE
(
SalesOrderID uniqueidentifier not null index ix_SalesOrderID,
OrderFlag nvarchar(100) not null
) with (memory_optimized=on)
go
-- natively compiled stored procedure that includes the query
CREATE PROCEDURE dbo.usp_SOHOnlineOrderResult
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS BEGIN ATOMIC WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE=N'us_english')
-- table variable for creating the single resultset
DECLARE @result dbo.SOHOnlineOrderResult
-- CASE OnlineOrderFlag=1
INSERT @result
SELECT SalesOrderID, N'Order placed online by customer'
FROM Sales.SalesOrderHeader_inmem
WHERE OnlineOrderFlag=1
-- ELSE
INSERT @result
SELECT SalesOrderID, placed by sales person'
FROM Sales.SalesOrderHeader_inmem
WHERE OnlineOrderFlag!=1
-- return single resultset
SELECT SalesOrderID, OrderFlag FROM @result
END
GO
EXEC dbo.usp_SOHOnlineOrderResult
GO
또한 참조하십시오
네이티브 컴파일된 저장 프로시저의 마이그레이션 문제
메모리 내 OLTP에서 지원되지 않는 Transact-SQL 구문.