我有一个旧的经典ASP应用程序,需要在SQL Server 2008表中插入数千行。目前,应用程序分别为每一行发送INSERT
命令,这需要很长时间,同时锁定表。
有更好的方法吗?例如,可能:
Insert all rows into a temp table
然后再做
SELECT INTO from the temp table
答案 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
语句。