使用SELECT * INTO

时间:2017-06-01 16:28:34

标签: sql sql-server tsql

我有一个复杂的存储过程,它从许多表中收集数据并将其插入MyTable。它插入超过1.5 M的记录。

在填充ID

时,创建顺序MyTable数字的最有效方法是什么?

表的结构如下所示:

IF OBJECT_ID ('MyTable', 'U') IS NOT NULL 
  DROP TABLE MyTable;

SELECT * 
INTO MyTable 
FROM 
    (SELECT 
         col1, col2, col3
     FROM   
         Table1 
     INNER JOIN 
         Table2 ON...
     INNER JOIN 
         Table3 ON...
     INNER JOIN 
         Table4 ON...
     WHERE  
         Condition1,
         Condition2) T

3 个答案:

答案 0 :(得分:2)

SELECT ID = IDENTITY(INT, 1, 1),* INTO MyTable FROM (

                            SELECT 
                                    col1,
                                    col2,
                                    col3
                            FROM    Table1 INNER JOIN Table2 ON...
                                    Table3 INNER JOIN Table4 ON...
                            WHERE   Condition1,
                                    Condition2
                                ) T

ID = IDENTITY(INT, 1, 1)将创建一个自动递增的身份ID,我没有测试代码

答案 1 :(得分:2)

我认为简单的row_number()有用,如下所示:

IF OBJECT_ID ('MyTable', 'U') IS NOT NULL 
   DROP TABLE MyTable;

SELECT * INTO MyTable FROM (
                        SELECT 
                                RowNum = Row_Number() over (order by (Select NULL)) --Instead you can generate based on any column in the table
                                col1,
                                col2,
                                col3
                        FROM    Table1 INNER JOIN Table2 ON...
                                Table3 INNER JOIN Table4 ON...
                        WHERE   Condition1,
                                Condition2
                            ) T

答案 2 :(得分:1)

正如Gabri所示,您可以将IDENTITY与SELECT INTO语句一起使用。这将使该列和IDENTITY列。如果您不希望它是IDENTITY列,您可以使用ROW_NUMBER;这适用于任何SQL 2005+系统。

SELECT ID = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), * 
INTO MyTable FROM 
(
  SELECT 
          col1,
          col2,
          col3
  FROM    Table1 INNER JOIN Table2 ON...
          Table3 INNER JOIN Table4 ON...
  WHERE   Condition1, Condition2
) T;
相关问题