Динамически создаваемые распределенные запросы в 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
переменная, которую я использовал..