2012-03-23 56 views
17

顯然,我不能使用它們。我得到這樣的錯誤消息:函數中是否有臨時表?

功能

中無效使用了副作用的運算符「選擇」。如果我想要做這樣的事情:

select bleh 
    into #temp 
    from Blah 

...在一個函數內。

+2

您可以改用表格變量。 – 2012-03-23 18:51:41

回答

25

沒有,每this thread where the same question was asked,你不能,但你可以使用一個table variable

DECLARE @MyTempTableVariable TABLE (SCHEMA) 

INSERT INTO @MyTempTableVariable 
SELECT bleh 
FROM bleh 
+0

基數錯誤是我們希望用SQL DB函數中的臨時表替換表變量的最大原因。但是,此問題有一個解決方法,詳情如下所述:http://blogs.msdn.com/b/blogdoezequiel/archive/2012/12/01/table-variables-and-row-estimations.aspx#.VGC5oMnm7HS 將OPTION(RECOMPILE)添加到使用表變量的語句中可能會提高性能。 – Vladislav 2014-11-10 13:09:48

1

你也可以用CTE做到這一點。請參閱SSMS中的模板瀏覽器。智能感知混淆了這個問題,並且在你完成CTE和下面的插入/選擇之前會顯示錯誤,但它會起作用。

+0

這應該是一個評論,而不是一個答案。 – 2017-03-27 17:25:21

+0

@MohammadAkbari:我不同意。它爲另一個答案增加了一個非常有效的選擇。 – davidhigh 2017-03-27 18:25:56

+2

@Lew Wolf:儘管如此,一個例子或者一段代碼會很好。 – davidhigh 2017-03-27 18:27:04