0

我在 SQL Server 2000 中有一个存储过程,它运行一堆Exec语句,这些语句都执行从链接服务器到本地数据库的批量插入。链接服务器是 SQL Server 2012 实例。

这是该过程的示例:

Create Procedure CopyData(@LinkedServerName Varchar(10), @LinkedServerDatabase Varchar(20)) 
AS
BEGIN
    exec ('delete from table ConcernedTable')
    exec ('delete from table b')
    exec ('delete from table c')
    exec ('delete from table d')
.
.   
.
    exec ('delete from table z')

    exec ('insert into ConcernedTable select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].ConcernedTable')
    exec ('insert into b select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].b')
    exec ('insert into c select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].c')
    exec ('insert into d select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].d')
.
.
    exec ('insert into z select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].z')
END

ConcernedTable在 SQL Server 2012 上有一个包含 100,000 行的表 ( ),但是当我运行Exec从 SQL Server 2012 到 SQL Server 2000 的语句时,它只插入了 12,768 行。

我认为我的查询有错误,但事实并非如此。如果我Exec在单独的查询窗口上运行相同的语句,它会插入所有 100,000 行。更奇怪的是,如果我如下所示切换exec语句的位置,ConcernedTable它会插入所有 100,000 行。

Create Procedure CopyData(@LinkedServerName Varchar(10), @LinkedServerDatabase Varchar(20)) 
AS
BEGIN
    exec ('delete from table b')
    exec ('delete from table c')
    exec ('delete from table d')
.
.   
.
    exec ('delete from table z')
    exec ('delete from table ConcernedTable')


    exec ('insert into b select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].b')
    exec ('insert into c select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].c')
    exec ('insert into d select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].d')
.
.   
.
    exec ('insert into z select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].z')
    exec ('insert into ConcernedTable select * from ['+@LinkedServerName+'].['+@LinkedServerDatabase+'].[dbo].ConcernedTable')
END

制作 Linkedserver name 和 Database name 变量的原因是有多个链接服务器,因此不想为每个服务器创建相同的语句。

我是否Exec错误地使用了该语句,或者我需要在之后做些什么exec来确保在它移动到下一个之前插入所有行?

4

0 回答 0