Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 加速对2个数据库的插入查询_Sql_Sql Server_Tsql_Insert_Query Optimization - Fatal编程技术网

Sql 加速对2个数据库的插入查询

Sql 加速对2个数据库的插入查询,sql,sql-server,tsql,insert,query-optimization,Sql,Sql Server,Tsql,Insert,Query Optimization,在下面的查询中,我从一个数据库中获取某些列,然后将它们插入另一个数据库的另一个表中。然后,我将删除从中复制的表。目前,复制5300多条记录需要5分36秒。有什么办法可以提高速度吗 Declare @cursor cursor, @Firstname nchar(50), @MiddleInitial nchar(5), @Surname nchar(50), @EmailAddress nchar(100), @DOB nchar(8), @Sex char(1), @altEmail nch

在下面的查询中,我从一个数据库中获取某些列,然后将它们插入另一个数据库的另一个表中。然后,我将删除从中复制的表。目前,复制5300多条记录需要5分36秒。有什么办法可以提高速度吗

Declare @cursor cursor, @Firstname nchar(50), @MiddleInitial nchar(5), 
@Surname nchar(50), @EmailAddress nchar(100), @DOB nchar(8), @Sex char(1), @altEmail nchar(100)

set @cursor = cursor for select Firstname, MiddleInitial, Surname, HomeEmailAddress, 
DateOfBirth, Sex, WorkEmailAddress from cs_clients

open @cursor

fetch next from @cursor into @FirstName, @MiddleInitial, @Surname, @EmailAddress, @DOB, @Sex, @altEmail
while @@fetch_status = 0

begin
    set nocount on
    use hrwb_3_0
    declare @Password nvarchar(100), @EncryptedText nvarchar(100)
    exec L_Password_GetRandomPassword @Password output, @EncryptedText output

    declare @userID nvarchar(100)
    exec L_Password_GetRandomPassword @userID output, @EncryptedText output

    set nocount off

        set @EmailAddress = isnull(@EmailAddress, @altEmail)        

        insert into A_User values
        ('CS', 'CLUBSAIL', rtrim(@userID), rtrim(@Password), rtrim(@Surname), rtrim(@FirstName), rtrim(@MiddleInitial), 15, 'NA', 'NA', '', rtrim(@EmailAddress), rtrim(@DOB), 1, 0, 1, 0, '', rtrim(@Sex), '')

    fetch next from @cursor into @FirstName, @MiddleInitial, @Surname, @EmailAddress, @DOB, @Sex, @altEmail
end

如果您经常执行这种数据库到数据库的传输,您可能应该查看DTS或SSI(取决于您使用的SQL Server版本)。这两种技术都是专门为在不同的源和目标之间提取、转换和加载数据而设计的。

如果您经常执行这种数据库到数据库的传输,您可能应该查看DTS或SSI(取决于您使用的SQL Server版本)。这两种技术都是专门为在不同的源和目的地之间提取、转换和加载数据而设计的。

这很慢,因为您一次只做一个

有关同时执行多行的一些方法,请参见此处:


或者在本地数据库上创建一个临时表,然后使用该表一次插入所有内容(即在一条语句中)。

这很慢,因为一次只插入一条语句

有关同时执行多行的一些方法,请参见此处:


或者在本地数据库上创建一个临时表,然后使用该表一次插入所有内容(即在一条语句中)。

如果您只需要在具有相同结构的表之间复制数据,则这应该可以:

INSERT INTO Database2.dbo.Table2 SELECT * FROM Database1.dbo.Table1

如果您还需要转换数据(如您的示例所示),则根据转换的复杂性,您可能无法在一条语句中完成转换。

如果您只需要在具有相同结构的表之间复制数据,则这应该可以:

INSERT INTO Database2.dbo.Table2 SELECT * FROM Database1.dbo.Table1
如果您还需要转换数据(如您的示例所示),那么您可能需要也可能无法在一条语句中完成转换,这取决于转换的复杂性