Я использую SQL Server 2008 и имею связанный сервер с БД Oracle.Обе БД находятся на моем локальном компьютере с использованием Win 7.
Очень интересно, что count (*) не работает для одного синтаксиса, но работает в другом синтаксисе.
Я запускаю следующий оператор SQL вSQL Server Management Studio.
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 в Oracle и проверка количества записей всех таблиц на заключительном этапе.
С третьим утверждением мы могли бы делать такие вещикак
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;
Однако он работает только если MSDTC включен .В противном случае исключение будет выдано в операторе insert
.Из-за ограничения привилегий я не могу включить 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