【问题标题】:Inserting data into a temporary table将数据插入临时表
【发布时间】:2012-07-31 12:17:43
【问题描述】:

在创建了一个临时表并像这样声明数据类型之后;

CREATE TABLE #TempTable(
ID int,
Date datetime,
Name char(20))

然后如何插入已经保存在数据库中物理表上的相关数据?

【问题讨论】:

    标签: sql sql-server temp-tables


    【解决方案1】:
    insert #temptable
    select idfield, datefield, namefield from yourrealtable
    

    【讨论】:

      【解决方案2】:

      创建临时表后,您只需执行普通的INSERT INTO () SELECT FROM

      INSERT INTO #TempTable (id, Date, Name)
      SELECT t.id, t.Date, t.Name
      FROM yourTable t
      

      【讨论】:

        【解决方案3】:
        INSERT INTO #TempTable(ID, Date, Name)
        SELECT OtherID, OtherDate, OtherName FROM PhysicalTable
        

        【讨论】:

          【解决方案4】:
          INSERT INTO #TempTable (ID, Date, Name) 
          SELECT id, date, name 
          FROM physical_table
          

          【讨论】:

          • 请记住在完成后删除表,否则您可能会遇到“数据库中已经有一个名为 '#TempTable' 的对象。”错误(如果您再次运行查询...)
          • 最初的问题是关于已经创建的表。由于提示有用,因此与作者的问题无关
          • @alexsuslin 已连接,别这样?
          【解决方案5】:
          insert into #temptable (col1, col2, col3)
          select col1, col2, col3 from othertable
          

          请注意,这被认为是不好的做法:

          insert into #temptable 
          select col1, col2, col3 from othertable
          

          如果临时表的定义发生变化,代码可能会在运行时失败。

          【讨论】:

            【解决方案6】:
            SELECT  ID , Date , Name into #temp from [TableName]
            

            【讨论】:

              【解决方案7】:

              正确的查询:

              drop table #tmp_table
              
              select new_acc_no, count(new_acc_no) as count1
              into #tmp_table
              from table
              where unit_id = '0007' 
              group by unit_id, new_acc_no
              having count(new_acc_no) > 1
              

              【讨论】:

              • 这个答案与问题无关。您从其他地方获取了这些信息。删除 new_acc_nounit_id = '0007'group byhaving count(new_acc_no) > 1 等会将答案转换为完全相同的副本:stackoverflow.com/a/15762663/1476885
              【解决方案8】:

              我在 SQL Server 中使用Insert 的方式。我也经常检查临时表是否存在。

              IF OBJECT_ID('tempdb..#MyTable') IS NOT NULL DROP Table #MyTable
              
              SELECT b.Val as 'bVals'
                INTO #MyTable
              FROM OtherTable as b
              

              【讨论】:

                【解决方案9】:

                要插入所有列中的所有数据,只需使用以下命令:

                SELECT * INTO #TempTable
                FROM OriginalTable
                

                在您完成临时表之后,不要忘记DROP,并且在您尝试再次创建它之前

                DROP TABLE #TempTable
                

                【讨论】:

                • 我喜欢这个,因为我不必CREATE#TempTable
                【解决方案10】:
                SELECT * 
                INTO #TempTable
                FROM table
                

                【讨论】:

                • 这里真的是最简单的答案。您也可以使用 dbo.MyTable ,它将是一个永久表。简单易懂
                【解决方案11】:

                Temporary table的基本操作如下,根据你的需求修改和使用,

                -- 创建一个临时表

                CREATE TABLE #MyTempEmployeeTable(tempUserID  varchar(MAX), tempUserName  varchar(MAX) )
                

                -- 将值插入临时表

                INSERT INTO #MyTempEmployeeTable(tempUserID,tempUserName) SELECT userid,username FROM users where userid =21
                

                -- QUERY A TEMP TABLE [这仅适用于同一会话/实例,不适用于其他用户会话实例]

                SELECT * FROM #MyTempEmployeeTable
                

                -- 删除临时表中的值

                DELETE FROM #MyTempEmployeeTable
                

                -- 删除一个临时表

                DROP TABLE #MyTempEmployeeTable
                

                【讨论】:

                • 虽然我知道这是一个临时表,但我仍然不建议有人使用 varchar(MAX)。
                • @bp_ 这是一个通用的示例 sn-p,它解释了用户,用户可以根据自己的应用程序要求指定数据类型及其大小。
                【解决方案12】:

                我提供了两种方法来解决同样的问题,

                解决方案 1:此方法包括 2 个步骤,首先创建一个临时表 指定数据类型,接下来插入现有数据中的值 表。

                CREATE TABLE #TempStudent(tempID  int, tempName  varchar(MAX) )
                INSERT INTO #TempStudent(tempID, tempName) SELECT id, studName FROM students where id =1
                
                SELECT * FROM #TempStudent
                

                解决方案 2:这种方法很简单,您可以直接将值插入到 临时表,系统自动在其中创建 与原表数据类型相同的临时表。

                SELECT id, studName  INTO #TempStudent FROM students where id =1
                
                SELECT * FROM #TempStudent
                

                【讨论】:

                • 虽然我知道这是一个临时表,但我仍然不建议有人使用 varchar(MAX)。
                【解决方案13】:

                上面提到的所有答案几乎都可以达到目的。但是,您需要在对其进行所有操作后删除临时表。你可以关注-

                INSERT INTO #TempTable (ID, Date, Name) 
                SELECT id, date, name 
                FROM physical_table;
                
                IF OBJECT_ID('tempdb.dbo.#TempTable') IS NOT NULL 
                    DROP TABLE #TempTable;
                

                【讨论】:

                  【解决方案14】:

                  上面提到的所有答案几乎都可以达到目的。但是,您需要在对其进行所有操作后删除临时表。你可以关注-

                  INSERT INTO #TempTable (ID, Date, Name) 
                  SELECT id, date, name 
                  FROM physical_table;
                  
                  IF OBJECT_ID('tempdb.dbo.#TempTable') IS NOT NULL 
                      DROP TABLE #TempTable;
                  

                  【讨论】:

                    猜你喜欢
                    • 2017-04-02
                    • 2016-07-17
                    • 2013-12-05
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多