SQL Server中的临时表问题

时间:2010-12-15 15:33:24

标签: sql-server temp-tables

我有2个商店程序:

第一个创建#TempTable

CREATE PROCEDURE CreateTempTable
AS
BEGIN
    IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
    BEGIN
        DROP TABLE #TempTable;
    END 

    CREATE TABLE #TempTable(
        Value real NOT NULL         
END

第二个在我的#TempTable

中插入数据
   CREATE PROCEDURE InsertData
         @Value real 
    AS
    BEGIN
      INSERT #TempTable (Value) VALUES @Value
    END

当我调用这些程序时,我有一个错误:

exec CreateTempTable
exec InsertData" 1
go

名称'#TempTable'在InsertData中无效

你能帮助我吗?

2 个答案:

答案 0 :(得分:2)

在sproc结束后,sproc内部创建的临时表会自动删除。

您有几个选择:

  • 在sproc外部创建临时表作为独立查询。然后在连接关闭后它将被删除
  • 创建一个首先创建临时表的sproc,然后调用其他sprocs
  • 使用全局临时表(小心 - 并发问题可能会出现这种情况)

答案 1 :(得分:1)

我想这里的问题是您正在创建一个本地临时表,无法在CreateTempTable之外访问。您应该使用##而不是#创建全局临时表。

编辑是的,就是这样。这是你的固定脚本:

CREATE PROCEDURE CreateTempTable
AS
BEGIN
    IF OBJECT_ID('tempdb..##TempTable') IS NOT NULL
    BEGIN
        DROP TABLE ##TempTable;
    END 

    CREATE TABLE ##TempTable(
        Value real NOT NULL
    )
END
GO

CREATE PROCEDURE InsertData
    @Value real 
AS
BEGIN
    INSERT ##TempTable (Value) VALUES (@Value)
END
GO

exec CreateTempTable
exec InsertData 1
go