Динамически создаваемые распределенные запросы в SQL Server 2008 в Windows 7 - PullRequest
0 голосов
/ 13 октября 2009

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

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

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

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

В следующий раз, когда он запускается с другим SprocName, он на самом деле не выполняет вызов к компьютеру 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 с пакетом обновления 1 (SP1) без установленной CU
Машина B - Windows 2003 Sql SErver 2005 SP3 без CU установлен
Оба имеют в основном все опции MSDTC, кроме транзакций XA.

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

1 Ответ

0 голосов
/ 13 октября 2009

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

...