SQL Server 2008을 사용하고 있으며 Oracle 서버에 연결된 서버가 있습니다. 두 DB 모두 Win 7을 사용하는 로컬 컴퓨터에 있습니다.링크 된 서버 버그 카운트 (*) 레코드에?
매우 흥미롭게도 count (*)는 하나의 구문에서는 작동하지 않지만 다른 구문에서는 작동합니다.
SQL Server Management Studio에서 다음 SQL 문을 실행합니다.
select COUNT(*) from openquery([hr2_major], 'select * from user_tables'); -- result is 106
select COUNT(*) from [hr2_major]...user_tables; -- result is 106
exec('select count(*) from user_tables') at [hr2_major]; --result is 206
결과가 다릅니다.
누구나 처음 두 문장의 잘못된 점을 알고 있습니까?
감사
업데이트
내가 오라클 SQL 서버에서 데이터를 마이그레이션하고, 최종 단계에서 모든 테이블의 레코드 수를 검증한다하고있는 중이 야. 이 MSDTC가 켜져있는 경우에만 작동하지만 세 번째 문으로
, 우리는declare @recordCount int;
declare @countTable table(c int);
insert into @countTable exec('select count(*) from user_tables') at [hr2_major];
select @recordCount = c from @countTable;
처럼 같은 일을 할 수 있습니다. 그렇지 않으면 예외가 insert
문에 throw됩니다. 권한 제한으로 인해 MSDTC를 서버에서 사용할 수 없습니다. 따라서 세 번째 문장은 사용할 수 없습니다.
제 질문은 어떻게 첫 번째 또는 두 번째 문을 작동시키는 것입니다. 감사!
또 다른 업데이트 : 여기
같은 문제를 시뮬레이션하기위한 T-SQL이다.
exec('drop table test_table') at [hr2_major];
exec('create table test_table(col1 int)') at [hr2_major];
declare @i int;
declare @sql varchar(8000);
set @i = 0;
while @i < 500
begin
set @sql = 'insert into test_table(col1) values(' + CONVERT(varchar(10), @i) + ')';
exec(@sql) at [hr2_major];
set @i = @i + 1;
end
select COUNT(*) from [hr2_major]...test_table -- result is 200
select COUNT(*) from openquery([hr2_major], 'select * from test_table') -- result is 200
exec('select count(*) from test_table') at [hr2_major] -- result is 500
'간부'의 당신의 정의에 따라 정확한 양 '권리'되어 있고 다른 사람이 잘못인가? 나는 이것을 내일 시험해야 할 것이다. – SQLMason
예 ~ Oracle에는 206 개의 테이블이 있습니다. –