Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Dotyczy: Azure SQL Database i SQL Server, począwszy od SQL Server 2017 (14.x)
Wyrażenia CASE są obsługiwane w natywnie skompilowanych modułach języka T-SQL. W poniższym przykładzie pokazano sposób użycia wyrażenia CASE w zapytaniu.
-- Query using a CASE expression in a natively compiled stored procedure.
CREATE PROCEDURE dbo.usp_SOHOnlineOrderResult
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE=N'us_english')
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
END
GO
EXEC dbo.usp_SOHOnlineOrderResult
GO
Dotyczy: SQL Server 2014 (12.x) i SQL Server poczynając od wersji SQL Server 2016 (13.x)
Wyrażenia CASE nie są obsługiwane w natywnie skompilowanych modułach języka T-SQL. Poniższy przykład przedstawia sposób implementowania funkcjonalności wyrażenia CASE w natywnie skompilowanej procedurze składowanej.
Przykłady kodu używają zmiennej tabeli do konstruowania pojedynczego zestawu wyników. Jest to odpowiednie tylko podczas przetwarzania ograniczonej liczby wierszy, ponieważ obejmuje utworzenie dodatkowej kopii wierszy danych.
Należy przetestować wydajność tego obejścia.
-- 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, N'Order 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
Zobacz też
Problemy z migracją w przypadku natywnie skompilowanych procedur składowanych
konstrukcje Transact-SQL, które nie są obsługiwane przez OLTP In-Memory