4

我创建了一个存储过程,它创建一个临时表,插入,选择然后删除。在 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”。

知道为什么会发生这种情况吗?如果我将它更改为表变量,它似乎可以很好地与导入/导出一起使用,但我不明白为什么它不能与临时表一起使用。

4

2 回答 2

0

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

我在这里可能是错的,但在上述过程的情况下,导入或导出的逻辑似乎是

INSERT数据

SELECT数据

DROP数据

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

使用变量(或 no DROP),它是

INSERT数据

SELECT数据

INSERT(进出口)

在第二种情况下,数据仍然存在。在第一种情况下,他们走了。如果您想使用#tmptable,一种解决方法是使用以下代码开始您的代码:

IF OBJECT_ID('tempdb..#tmptable') IS NOT NULL DROP TABLE #tmptable
于 2013-02-13T20:46:38.430 回答
0

将“设置 FMTONLY 关闭;” 就在“SET NOCOUNT ON”的正上方

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

于 2014-12-22T18:18:42.383 回答