0
我習慣於在MSSQL 2008 R2中使用公用表表達式(CTE)。我知道語法在他們可以出現的位置有點煩瑣,而在普通的T-SQL中,在with
表達式之前需要一個明確的分號(或者開始一個新的批處理)。我想在用戶定義的函數中使用CTE。對於簡單的情況下,這個工程:表值函數中的公用表表達式(CTE)
create function dbo.udf_test()
returns table
with schemabinding
as
return (
with foo as (
select 5 as f
)
select f
from foo
)
但現在我想使我的功能udf_test
更復雜一點。例如在函數體內聲明一個變量。首先我需要明確的begin
和end
,因爲函數體將不再是單個語句。所以我儘量從而創建一個:
create function dbo.udf_test()
returns table
with schemabinding
as
begin
return (
with foo as (
select 5 as f
)
select f
from foo
)
end
然而,這給出了錯誤
Incorrect syntax near the keyword 'with'.
我如何使用CTE在我的表值函數,如果它比單return
聲明更復雜?
如果向內聯表值函數添加多於1條語句,它將不再是內聯表值函數。它將成爲一個多語句表值函數。因此,表現會令人恐慌。通常這些比標量函數更糟糕。順便說一句,你不需要像這樣在括號中包括你的回報。 –
感謝您的提示。在這種特殊情況下,函數不會嵌入到任何更大的查詢中,而是直接調用並將結果直接插入到另一個表中。所以我不關心優化器是否可以通過內聯來「看透」函數定義。儘管如此,我仍會密切關注減速。 –