Bu CASE
ifade neden :
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
Bu sonuç üretilsin mi?
Hata iletisi: Msg 8180, Seviye 16, Durum 1, Satır 1
İfadeleri hazırlanamadı.
Msg 125, Seviye 15, Durum 4, Satır 1
Vaka ifadeleri yalnızca 10. seviyeye yuvalanabilir.
Açıkçası CASE
burada 10'dan fazla "dal" olmasına rağmen iç içe bir ifade yoktur.
Başka bir tuhaflık. Bu satır içi tablo değerli işlev aynı hatayı üretir:
ALTER FUNCTION [dbo].[fn_MyFunction]
(
@var varchar(20)
)
RETURNS TABLE
AS
RETURN
(
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
)
Ancak benzer bir çoklu ifade TVF iyi çalışıyor:
ALTER FUNCTION [dbo].[fn_MyFunction]
(
@var varchar(20)
)
RETURNS @result TABLE
(
value varchar(max)
)
AS
BEGIN
INSERT INTO @result
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
RETURN;
END
SELECT CASE v.V WHEN 'a' THEN 1 WHEN 'b' THEN 2 END FROM (VALUES ('a'), ('b')) AS v (V);
veSELECT CASE WHEN v.V = 'a' THEN 1 WHEN v.V = 'b' THEN 2 END FROM (VALUES ('a'), ('b')) AS v (V);
çevirmek tamamen aynı VAKA ifadesi olarak yeniden tanımlanır yürütme planı (kendiniz doğrulamak için çekinmeyin)CASE WHEN [Union1002]='a' THEN (1) ELSE CASE WHEN [Union1002]='b' THEN (2) ELSE NULL END END
- iç içe olan, gördüğünüz gibi.