Exec
SQL Server 2000 に、リンク サーバーからローカル データベースへの一括挿入を実行する一連のステートメントを実行するストアド プロシージャがあります。リンク サーバーは 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
に my のステートメントの位置を切り替えると、100,000 行すべてが挿入されることです。ConcernedTable
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 名と Database 名の変数を作成する理由は、複数のリンク サーバーが存在するため、サーバーごとに同じステートメントを作成したくないからです。
Exec
ステートメントを間違って使用していますか、またはexec
次の行に移動する前にすべての行が挿入されるようにするために、後で行う必要があることはありますか?