2017-04-18 61 views
2

我想創建一個存儲過程,其中我創建了一些臨時表與一些fieds(僅用於實體框架來識別返回字段,否則它只返回int),當我運行時我的存儲過程#EmpTab是創建並說,即使我手動刪除這個表已經存在。一旦我運行sp,它就會說同樣的。臨時表存在於tempdb

alter proc test 
as 
begin 

IF OBJECT_ID('tempdb..#EmpTab ') IS NOT NULL 
BEGIN 
    DROP TABLE #EmpTab 
END 


create table #EmpTab (
ID int, 
Name varchar(20), 

); 

select empId, EmpName into #EmpTab from employee; 

select * from #EmpTab ; 
drop table #EmpTab ; 

end 
+0

使用 '插入' – PP006

回答

0
IF you check your script you will find #EmpTab Is Getting Created Twice 
    1)1st time you create Temp Table. 
    2)While Inserting Data INTO Temp Table. 
    Both time you Create Same Temp_Table. 

     CREATE proc test 
     AS 
     BEGIN 

     SET NOCOUNT ON 

     SELECT empId, EmpName INTO #EmpTab 
     FROM employee; 

     SELECT * FROM #EmpTab ; 
     DROP TABLE #EmpTab ; 

     SET NOCOUNT OFF  
     END 
+0

** Alfaiz Ahmed **,您的解決方案運行成功,但執行sp時表示無效#EmpTab – Saleem

+0

** Alfaiz Ahmed **,您的解決方案效果很好。謝謝。 – Saleem

+0

@Saleem歡迎兄弟您可以Upvote me如果解決方案爲您工作 –

4

SELECT ... INTO創建臨時表。 CREATE TABLE也是如此。

要麼刪除明確的CREATE TABLE,要麼將SELECT ... INTO替換爲INSERT如果要保留顯式創建。

順便說一句,這裏不需要臨時表。整個過程的代碼可以與

select empId, EmpName from employee; 

更換這只是虛擬的代碼測試程序?

0

使用插入,因爲已經表已創建

Insert into #Emptab(ID,Name) 
select empId, EmpName from employee; 
+0

** Alfaiz艾哈邁德** ,只是爲了我的信息,想知道這個存儲過程在我的應用程序中使用,並且應用程序被許多用戶使用。擁有本地臨時表而不是全局臨時表是否好? – Saleem

0

嘗試使用下面的代碼:

alter proc test 
    as 
    begin 

    IF OBJECT_ID('tempdb..#EmpTab ') IS NOT NULL 
    BEGIN 
     DROP TABLE #EmpTab 
    END 


    create table #EmpTab (
    ID int, 
    Name varchar(20), 

    ); 

    Insert into #Emptab(ID,Name) 
    select empId, EmpName from employee; 

    select * from #EmpTab ; 
    drop table #EmpTab ; 

    end