SQL Server有效地插入多行

时间:2017-11-26 04:49:51

标签: sql-server sql-insert

我有一个旧的经典ASP应用程序,需要在SQL Server 2008表中插入数千行。目前,应用程序分别为每一行发送INSERT命令,这需要很长时间,同时锁定表。

有更好的方法吗?例如,可能:

Insert all rows into a temp table 

然后再做

SELECT INTO from the temp table

1 个答案:

答案 0 :(得分:1)

如果您在应用程序本身中生成日期列表,那么您可以使用必要的添加项生成它们以使其工作。

在SQL Server 2008中,您可以在一个命令中插入多行,这比逐行插入要好一些。

以下是一些示例,说明如何使用表变量表示虚拟数据,并使用GETDATE()生成几个不同的日期(您显然会在应用程序中生成这些日期):< / p>

DECLARE @TABLE AS TABLE
(
      RowID         INT IDENTITY
     ,MyDate        DATETIME
)
;

INSERT INTO @TABLE (MyDate) 
VALUES 
     (GETDATE())
    ,(GETDATE()+1)
    ,(GETDATE()+2)
    ,(GETDATE()+3)
    ,(GETDATE()+4)
    ,(GETDATE()+5)
    ,(GETDATE()+6)

SELECT * FROM @TABLE
;

返回:

RowID  | MyDate
1      | 26/11/2017 10:51:49
2      | 27/11/2017 10:51:49
3      | 28/11/2017 10:51:49
4      | 29/11/2017 10:51:49
5      | 30/11/2017 10:51:49
6      | 01/12/2017 10:51:49
7      | 02/12/2017 10:51:49

您也可以使用以下格式:

INSERT INTO @TABLE (MyDate)
SELECT GETDATE()
    UNION ALL
SELECT GETDATE() + 1
    UNION ALL
SELECT GETDATE() + 2
    UNION ALL
SELECT GETDATE() + 3
    UNION ALL
SELECT GETDATE() + 4
    UNION ALL
SELECT GETDATE() + 5
    UNION ALL
SELECT GETDATE() + 6
;

SELECT * FROM @TABLE
;

返回:

RowID  | MyDate
1      | 26/11/2017 10:51:49
2      | 27/11/2017 10:51:49
3      | 28/11/2017 10:51:49
4      | 29/11/2017 10:51:49
5      | 30/11/2017 10:51:49
6      | 01/12/2017 10:51:49
7      | 02/12/2017 10:51:49

不是ASP专家,但如果您在应用程序中连接字符串,则应该能够连续地连接字符串,而不是将其重新创建为每个日期的全新INSERT语句。