我在 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
来确保在它移动到下一个之前插入所有行?