临时表存在于tempdb中

时间:2017-04-18 06:55:53

标签: sql-server tsql c#-4.0

我正在尝试创建一个存储过程,我在其中创建一个带有一些fieds的临时表(仅用于实体框架以识别返回字段,否则它只返回int)并且当我运行我的存储过程时#EmpTab是create并且即使我手动删除该表,该表已经存在。一旦我运行sp然后它说同样的。

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

4 个答案:

答案 0 :(得分:4)

SELECT ... INTO创建临时表。 CREATE TABLE也是如此。

如果要保留显式创建,请删除显式CREATE TABLE或将SELECT ... INTO替换为INSERT

BTW无论如何都不需要临时表。整个程序代码可以替换为

select empId, EmpName from employee;

这只是一个带有虚拟代码的测试程序吗?

答案 1 :(得分:0)

使用Insert into,因为已经创建了表

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

答案 2 :(得分: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

答案 3 :(得分: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