我创建了一个存储过程,用于创建临时表,插入,选择然后删除。在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'。
知道为什么会这样吗?如果我将它更改为表变量,它似乎可以正常使用导入/导出,但我不明白它为什么不使用临时表。
答案 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"