【问题标题】:Is it possible to have temp tables in a function?函数中是否可以有临时表?
【发布时间】:2012-04-08 08:19:23
【问题描述】:

显然,我不能使用它们。我收到如下错误消息:

在函数中无效使用副作用运算符“SELECT”

如果我想做这样的事情:

select bleh
  into #temp
  from Blah

...在函数内部。

【问题讨论】:

  • 您可以改用表变量。

标签: sql sql-server tsql function temp-tables


【解决方案1】:

不,根据this thread where the same question was asked,您不能,但您可以使用table variable

DECLARE @MyTempTableVariable TABLE (SCHEMA)

INSERT INTO @MyTempTableVariable
SELECT bleh
FROM bleh

【讨论】:

  • 基数错误是我们希望在 SQL DB 函数中用临时表替换表变量的最大原因。但是,这里有一个解决方法,详细描述如下:blogs.msdn.com/b/blogdoezequiel/archive/2012/12/01/… 在使用表变量的语句中添加 OPTION (RECOMPILE) 可能会提高性能。
  • 这对我不起作用...这可能是因为我在表变量中添加了一个列 INT IDENTITY(1,1)
  • 为什么有一个表变量的标识?这些应该是短暂的,可能不需要身份 - 但这是我的 2 美分。
【解决方案2】:

您也可以使用 CTE 来完成。请参阅 SSMS 中的模板浏览器。 IntelliSense 会混淆该问题并在您完成 CTE 和以下插入/选择之前显示错误,但它会起作用。

【讨论】:

  • 这应该是评论,而不是答案。
  • @MohammadAkbari:我不同意。它为其他答案添加了一个非常有效的替代方案。
  • @Lew Wolf:不过,举个例子或一段代码就好了。
猜你喜欢
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多