【发布时间】:2019-08-09 10:13:08
【问题描述】:
我需要创建一个视图,它以以下 SQL 开头:
IF OBJECT_ID('tempdb..#TempTable') Is Not null
Drop Table #TempTable
我还在视图中进一步重建此 #TempTable,然后将 Temptable 中的数据用于查询的其余部分 - 以获得更好的性能。见:
Reduce cost for Table Valued Function - XML Reader in query plan - how?
但是,SSMS 告诉我:
Incorrect syntax near the keyword 'IF'
Views or functions are not allowed on temporary tables.
Table names that begin with '#' denote temporary tables.
有没有什么办法可以使用IF语句,把Temptable去掉,然后在视图中使用重建的Temptable?
回答 - 我需要使用存储过程,而不是视图。
【问题讨论】:
-
你不能。 “视图是一个虚拟表,其内容由查询定义” (Views)。 View 实际上是一个预编译的
SELECT语句,仅此而已。您不能使用VIEW来执行 DDL 或 DML 操作。您在这里试图解决的实际问题是什么?也许你在这里真正追求的是一个存储过程? -
刚刚研究了一些,存储过程是运行上述查询的另一种方式。
标签: sql sql-server tsql sql-server-2012