SQL Server 从表变量插入临时表

Posted

技术标签:

【中文标题】SQL Server 从表变量插入临时表【英文标题】:SQL Server Insert Into Temp table from a table variable 【发布时间】:2015-09-16 09:34:22 【问题描述】:

我需要将表变量中的数据插入到临时表中,但它给了我以下错误。

消息 208,级别 16,状态 0,过程 sp_CreateScenario_q2,第 70 行 无效的对象名称“#tmpp1”。

这里是代码

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

INSERT INTO #tmpp1 
   SELECT  
       [PlanningHierarchyId] 
       ,[ProductReferenceId]
       ,[PlanningYear] 
       ,[PlanningSeason]
       ,[UpdatedBy] 
   FROM 
       @paramTable

有什么办法吗?

【问题讨论】:

【参考方案1】:

因为您删除临时表然后尝试插入其中,所以出现错误“无效对象名称 '#tmpp1”。

尝试使用:

IF OBJECT_ID('tempdb..#tmpp1') IS NOT NULL
   DROP TABLE #tmpp1
            SELECT  
                 [PlanningHierarchyId] 
                ,[ProductReferenceId]
                ,[PlanningYear] 
                ,[PlanningSeason]
                ,[UpdatedBy]
            INTO #tmpp1  
            FROM @paramTable

【讨论】:

【参考方案2】:

你正在丢桌子。要么使用CREATE 创建一个,要么使用select * into 而不是insert into

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

            SELECT  
                 [PlanningHierarchyId] 
                ,[ProductReferenceId]
                ,[PlanningYear] 
                ,[PlanningSeason]
                ,[UpdatedBy] into #tmpp1
            FROM @paramTable

【讨论】:

【参考方案3】:

当表已经存在时使用插入,使用 SELECT into from 。当您尝试插入临时表时,临时表不存在。

参考:INSERT INTO vs SELECT INTO

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

                SELECT  
                     [PlanningHierarchyId] 
                    ,[ProductReferenceId]
                    ,[PlanningYear] 
                    ,[PlanningSeason]
                    ,[UpdatedBy] 
                    INTO #tmpp1
                FROM @paramTable

【讨论】:

以上是关于SQL Server 从表变量插入临时表的主要内容,如果未能解决你的问题,请参考以下文章

将数据从表插入临时表,然后从临时表中选择特定行

sql server 表变量表类型临时表

SQL Server 表变量和临时表的区别

SQL Server 存储过程创建临时表并插入值

sql server中的临时表表变量和公用表表达式

将本地数据插入 SQL Server 临时表