2012-06-27 50 views
0

我在这个格式写了一个查询..工作在SQL Server 2008中视图

Select * INTO #xyz FROM() 

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

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

但出现以下错误:

  1. 关键字'INTO'附近的语法不正确。
  2. 视图或函数不允许在临时表

是否有人可以提出一个解决办法呢?是否可以使用临时表来创建视图?

+0

什么是您的最终目标是什么?你想用临时表做什么? – squillman

+0

你不能。视图是单个声明活动。您可以使用“CTE”来帮助保持代码可读性。 – Praveen

回答

3

你肯定不能在视图中使用SELECT INTO。而且一张表头也不合格。相反,请使用等效于临时表的派生表。例如:

假设你有:

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' 

你也可以USEA的CTE

+0

你可以提到派生表。 SQL非常容易组合,这是一种乐趣。 – buckley

+0

谢谢,我会试试这个。 – Nir

1

正如错误消息表明它不可能使用临时表。

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

CTE可以帮助你取决于你的情况。如果在研究什么是CTE后认为它适合,请在某种情况下描述您的问题。简而言之,CTE是一个可以多次引用的查询,在过去,人们使用临时表来进行查询。

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