在SQL Server 2008视图中解决临时表

时间:2012-06-27 14:13:01

标签: sql-server-2008 view temp-tables

我用这种格式写了一个查询..

Select * INTO #xyz FROM ()

我后来想用它来创建一个视图,如...

CREATE VIEW aaa
AS 
   Select * INTO #xyz FROM ()

但收到以下错误:

  1. 关键字“INTO”附近的语法不正确。
  2. 临时表格上不允许使用视图或函数
  3. 有人可以建议一个解决方法吗?是否可以使用临时表来创建视图?

2 个答案:

答案 0 :(得分:3)

你当然不能在视图中使用select into。并且termp表也不合适。使用与临时表等效的派生表。例如:

假设你有:

select t1.id, t2.field1 into #temp from table1 t1
join Table2 t2 on t1.id = t2.id
where t2.somefield2 = 'mytest'

select t1.id, t2.field1, t1.field1
from mytable2 t1
join #Temp t2 on t1.id = t2.id
where t2.somefield = 'test'

然后你可以使用:

select t1.id, t2.field1, t1.field1
from mytable2 t1
join (select t1.id, t2.field1 
        from table1 t1
        join Table2 t2 on t1.id = t2.id
        where t2.somefield2 = 'mytest') t2 
    on t1.id = t2.id
where t2.somefield = 'test'

您也可以使用CTE

答案 1 :(得分:1)

正如错误消息所示,无法使用临时表。

您应该使用永久表或CTE,也可以在视图中指定。

CTE可以根据您的情况帮助您。如果您在研究CTE之后认为合适,请在某些背景下描述您的问题。简而言之,CTE是一个可以多次引用的查询,过去人们使用临时表。

http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx