2012-06-27 47 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