SQL Server导入和导出向导在临时表的存储过程中提供无效对象错误

时间:2013-02-13 17:36:43

标签: sql sql-server

我创建了一个存储过程,用于创建临时表,插入,选择然后删除。在SQL Server Management Studio中执行存储过程可以正常工作并提供预期的结果。

CREATE PROCEDURE usp_TempTableTest
    -- Add the parameters for the stored procedure here
    @color VARCHAR(10)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    CREATE TABLE #tmptable (
        color VARCHAR(10)
    )

    INSERT INTO #tmptable (color) VALUES (@color)

    SELECT color FROM #tmptable

    DROP TABLE #tmptable

END
GO

但是,在导入/导出工具中创建并使用该存储过程作为数据源时,它会给我错误:

  

无效的对象名称'#tmptable'。

知道为什么会这样吗?如果我将它更改为表变量,它似乎可以正常使用导入/导出,但我不明白它为什么不使用临时表。

2 个答案:

答案 0 :(得分:0)

当我在SSMS中运行模仿的存储过程(如上所述)时,我可以像过程中提到的那样返回返回的数据。但是,如果我像您一样尝试#tmptable,我也会收到同样的错误,因为DROP TABLE会删除它。据我所知,导入/导出基本上是最后的INSERT进程。它与table变量一起使用的原因是因为数据仍然存在于最终插入中;在DROP TABLE的情况下,它没有。例如,当我删除DROP TABLE时,它就可以了。

我可能在这里错了,但在上述程序的情况下进口或出口似乎是逻辑

INSERT数据

SELECT数据

DROP数据

INSERT(导入/导出):这会生成“无效的对象名称tmptable”“

使用变量(或没有DROP),它是

INSERT数据

SELECT数据

INSERT(导入/导出)

在第二种情况下,数据仍然存在。在第一种情况下,他们走了。如果您想使用#tmptable,请使用以下方法解决此问题:

IF OBJECT_ID('tempdb..#tmptable') IS NOT NULL DROP TABLE #tmptable

答案 1 :(得分:0)

Put" SET FMTONLY OFF;"正上方"设置NOCOUNT ON"

http://msdn.microsoft.com/en-us/library/ms173839.aspx