Динамически создаваемые распределенные запросы в SQL Server 2008 в Windows 7

Я просто собираю статистику на нескольких серверах, и в качестве теста я работаю на своей машине (машина A) и другой машине (машина B) в локальной сети.

Моя Машина (A) собирает всю информацию в промежуточной таблице с другой Машины (B). У меня есть sp, который работает и динамически создает что-то вроде этого:

 exec ('exec SprocName ?', 1000) at [Machine B]

То, что сделано выше, - это извлечение информации, необходимой для 1000 пакетов строк, с компьютера B. Это будет зациклено, пока не будут получены все данные.

В следующий раз, когда он запустится с другим SprocName, он на самом деле не вызовет Machine B, увидит @@rowcount как 0 и продолжит работу. Это только запускает первый sproc, который делает это к заявлению выше.

Итак, код псевдо:

while (each sproc)
{
 set @qry =  exec ('exec SprocName ?', 1000) at [Machine B]
 while (rowcount <> 0)
 {  exec (@qry) }
}

Я пробовал этот метод раньше как 'select * from openquery([Machine B], exec SprocName @batchsize), но на этот раз я пробовал другой метод. Кто-нибудь знает, почему exec () в Servername хочет работать только с одним sprocname? Он будет проходить и вытягивать все строки, но переход ко второму имени sprocname, очевидно, даже не вызывает Machine B.

Я не собираюсь использовать Servername.Table.Schema.Sproc по соображениям производительности.

Некоторые характеристики:
Машина A - Windows 7 Sql Server 2008 SP1 без CU установлен
Машина B - Windows 2003 Sql SErver 2005 SP3 без CU установлен
Оба имеют в основном все опции MSDTC, кроме транзакций XA.

Заранее спасибо, если кто-нибудь на самом деле понял мою проблему и может помочь.

1 ответ

Мне нужно немного отойти от кода на некоторое время и ненадолго... Вернулся и заметил недостаток в циклической логике. Код psuedo был в основном правильным... он не сбрасывал @rowcount переменная, которую я использовал..

Другие вопросы по тегам