我有一个复杂的存储过程,它从许多表中收集数据并将其插入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
答案 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;