使用存储过程从真实表中插入临时表中的值

时间:2017-02-18 15:13:03

标签: sql sql-server

如何使用存储过程从真实表中的临时表中插入值?

当我在SQL Server中执行此代码时,它向我显示正确的结果:

SELECT 
    Toy_Image, Toy_Name, Anime_Image, Anime_Name,
    Toy_Distributor_Image, Toy_Distributor
INTO #Temp
FROM Toy

但是当我尝试通过存储过程在SQL Server中执行此代码时,它没有给我任何结果并且它返回空值:

CREATE PROCEDURE AddToCart
AS
BEGIN
    SELECT 
        Toy_Image, Toy_Name, Anime_Image, Anime_Name, 
        Toy_Distributor_Image, Toy_Distributor
    INTO #Temp
    FROM Toy
END

我需要帮助来解决这个问题

3 个答案:

答案 0 :(得分:1)

我创建了表Toy并插入了测试记录。以下存储过程适用于我。

CREATE PROCEDURE AddToCart
AS
BEGIN
SELECT Toy_Image,Toy_Name,Anime_Image,Anime_Name,Toy_Distributor_Image,Toy_Distributor
INTO #Temp
FROM Toy

SELECT Toy_Image,Toy_Name,Anime_Image,Anime_Name,Toy_Distributor_Image,Toy_Distributor
FROM #Temp
END

当我运行程序时,我可以看到测试记录插入到#Temp中。

也许您需要提供更多详细信息。

答案 1 :(得分:1)

隐式删除在存储过程范围内创建的临时表,然后存储过程完成。

如果要将数据加载到之后可用的proc中的临时表中,请事先在同一连接上创建临时表,并在proc中使用INSERT而不是SELECT...INTO

或者,您可以使用由会话ID键入的永久表。这是维持购物车状态的更好方法。应用程序,以避免保持持久连接打开。但是,您需要清理被遗弃的会话。

答案 2 :(得分:0)

您在存储过程中创建的临时表只有存储过程的范围。也就是说,当存储过程完成执行时,它会自动删除。

这实际上被认为是SQL Server的功能。您可以在存储过程中使用临时表,而不必担心删除它们。

如果你想要"临时"要持久化的表,要么使用全局临时表,要么使用真实表。