Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
Добрый день!

Есть группа локальных серверов, делаю SELECT по всем серверам...как отсортировать результат по наименованиям серверов?

Спасибо.
22 ноя 18, 11:44    [21741016]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 35833
order by
22 ноя 18, 12:44    [21741155]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
Гавриленко Сергей Алексеевич
order by


Очень смешно! Меня само собой интересует параметр по которому ORDER BY...!
22 ноя 18, 12:52    [21741171]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 5671
r77
Гавриленко Сергей Алексеевич
order by


Очень смешно! Меня само собой интересует параметр по которому ORDER BY...!

ORDER BY [наименованиям серверов]
22 ноя 18, 12:52    [21741173]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
uaggster
Member

Откуда:
Сообщений: 494
Гавриленко Сергей Алексеевич
order by

))))

По сабжу:
Вроде бы никак не отсортировать. И уж точно - не директивой в запросе.
Т.к. такое представление - это самодеятельность SSMS.
Она открывает тучу коннектов к серверам, складирует результаты от каждого, а потом выводит с меткой сервера каждый отдельный резалтсет в одной таблице.
Этот резалтсет не настоящий. Его студия внутри себя создала. И сортировать его, соответственно, тоже она должна.
22 ноя 18, 12:54    [21741177]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
uaggster
Гавриленко Сергей Алексеевич
order by

))))

По сабжу:
Вроде бы никак не отсортировать. И уж точно - не директивой в запросе.
Т.к. такое представление - это самодеятельность SSMS.
Она открывает тучу коннектов к серверам, складирует результаты от каждого, а потом выводит с меткой сервера каждый отдельный резалтсет в одной таблице.
Этот резалтсет не настоящий. Его студия внутри себя создала. И сортировать его, соответственно, тоже она должна.


возвращается список каждый раз хаотично,не очень удобно, спасибо за ответ, так и думала.
22 ноя 18, 14:16    [21741342]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 5977
r77,

самое смешное, что имя сервера отображается в первой колонке. Вы какую версию SSMS используете? Установите последнюю, если сервер выше 2012.
22 ноя 18, 14:46    [21741412]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
Владислав Колосов
r77,

самое смешное, что имя сервера отображается в первой колонке.


ох..
мне и нужно отсортировать записи по алфавиту по результатам запроса из первой колонки...название этой колонки [имя сервера]!

Вы какую версию SSMS используете? Установите последнюю, если сервер выше 2012.


2008, спасибо, другую версию я не могу установить и использовать
22 ноя 18, 15:37    [21741520]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
r77
Владислав Колосов
r77,

самое смешное, что имя сервера отображается в первой колонке.


ох..
мне и нужно отсортировать записи по алфавиту по результатам запроса из первой колонки...название этой колонки [имя сервера]!

Вы какую версию SSMS используете? Установите последнюю, если сервер выше 2012.


2008, спасибо, другую версию я не могу установить и использовать


можно противоестественным способом - делать проверку на имя сервера и делать нужную паузу
полагаю, что студия выводит результат для группы серверов в порядке получения результата от серверов

+ например так


declare @delay varchar(10) ;
with servers as 
(select 'server1' [name], '05' [seconds] union all 
select 'server2' [name], '10' [seconds] union all 
select 'server3' [name], '15' [seconds] union all 
select 'server4' [name], '20' [seconds] union all 
select 'server5' [name], '25' [seconds] union all 
select 'server6' [name], '30' [seconds] union all 
select 'server7' [name], '35' [seconds] union all 
select 'server8' [name], '40' [seconds] union all 
select 'server9' [name], '45' [seconds] union all 
select 'server10' [name], '50' [seconds] 
)

select @delay = '00:00:'+name 
from servers 
where name=@@servername 

select @delay=isnull(@delay,'00:00:00')

waitfor delay @delay 

/*your query*/
select ..... 


22 ноя 18, 15:46    [21741535]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
опечатка в скрипте :
вместо
select @delay = '00:00:'+name 
должно быть
select @delay = '00:00:'+seconds
22 ноя 18, 15:47    [21741540]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
опечатка в скрипте :
вместо
select @delay = '00:00:'+name 
должно быть
select @delay = '00:00:'+seconds


благодарю,попробую
22 ноя 18, 16:05    [21741587]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1280
r77
Добрый день!

Есть группа локальных серверов, делаю SELECT по всем серверам...как отсортировать результат по наименованиям серверов?

Спасибо.

А добавить в каждый select столбец с именем сервера, к которому сделан запрос, нельзя?
24 ноя 18, 23:39    [21743917]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
DaniilSeryi
r77
Добрый день!

Есть группа локальных серверов, делаю SELECT по всем серверам...как отсортировать результат по наименованиям серверов?

Спасибо.

А добавить в каждый select столбец с именем сервера, к которому сделан запрос, нельзя?


результирующая выборка группового запроса и так содержит сервер (столбец ноль), на котором был выполнен запрос

у автора хотелка, чтобы общая выборка была отсортирована по имени сервера
25 ноя 18, 20:16    [21744254]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
L_argo
Member

Откуда:
Сообщений: 445
r77
Добрый день!

Есть группа локальных серверов, делаю SELECT по всем серверам...как отсортировать результат по наименованиям серверов?

Спасибо.
Если СЕЛЕКТ делаете именно Вы (а не сторонняя утилита), помещайте результат в врем. таблицу и потом сортируйте.
Ну или помещайте в Эксель и сортируйте. :)
25 ноя 18, 22:14    [21744291]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
komrad
DaniilSeryi
пропущено...

А добавить в каждый select столбец с именем сервера, к которому сделан запрос, нельзя?


результирующая выборка группового запроса и так содержит сервер (столбец ноль), на котором был выполнен запрос

у автора хотелка, чтобы общая выборка была отсортирована по имени сервера
Если есть поле имя, и нужно по нему отсортировать, то врорым постом дали верный ответ.
Но автор намёками и пожиманием плеч показывает, что это ему не подходит.
Может, нужно сформулировать вопрос поближе к рекомендациям оформления сообщений, то есть привести запрос, текущий результат, и желаемый результат? Или описать задачу подробнее, если это, например поведение какого то стороннего софта, в котором "ничего нельзя менять"?
L_argo
Если СЕЛЕКТ делаете именно Вы (а не сторонняя утилита), помещайте результат в врем. таблицу и потом сортируйте.
А почему бы не отсортиролвать сразу???
25 ноя 18, 23:25    [21744344]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
alexeyvg
komrad
пропущено...


результирующая выборка группового запроса и так содержит сервер (столбец ноль), на котором был выполнен запрос

у автора хотелка, чтобы общая выборка была отсортирована по имени сервера
Если есть поле имя, и нужно по нему отсортировать, то врорым постом дали верный ответ.
Но автор намёками и пожиманием плеч показывает, что это ему не подходит.
Может, нужно сформулировать вопрос поближе к рекомендациям оформления сообщений, то есть привести запрос, текущий результат, и желаемый результат? Или описать задачу подробнее, если это, например поведение какого то стороннего софта, в котором "ничего нельзя менять"?
L_argo
Если СЕЛЕКТ делаете именно Вы (а не сторонняя утилита), помещайте результат в врем. таблицу и потом сортируйте.
А почему бы не отсортиролвать сразу???


Никакой не сторонний софт, студия SQL...я и спрашиваю как отсортировать сразу в результатах запроса...ни в excel, ни еще где-то...естественно можно загрузить в временную таблицу и в excel и еще куда-нибудь - это дополнительные действия, которых хочется избежать. Описать задачу подробнее - либо не делали никогда запрос по группе серверов,поэтому и спрашиваете подробнее...

подробнее....
выбираю из контекстного меню группы локальных серверов -> "создать запрос"
select * from [БД].[dbo].[таблица] 

в результате возвращается в первом столбце имя сервера и далее все поля из запроса, как отсортировать по алфавиту имена серверов (по первому столбцу в котором написано имя сервера), называется столбец "Имя сервера"?

ORDER BY [имя сервера] = ошибка
27 ноя 18, 12:36    [21745943]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Eleanor
Member

Откуда:
Сообщений: 2174
komrad,

Спасибо, ваш вариант с waitfor работает.
Мне даже подошла сортировка по первой букве, для визуального удобства чтения результатов.
declare @delay varchar(10) = '00:00:0' + CAST((ASCII(UPPER(substring(@@servername, 1, 1))) - 65)/10.0 AS varchar(10))
waitfor delay @delay
select sum(size/1024)*8/1024 GB from sys.master_files
27 ноя 18, 13:22    [21746015]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
r77
выбираю из контекстного меню группы локальных серверов -> "создать запрос"
А, вот оно что, то есть вопрос, не как заставить сервер отсортировать результат запроса, а как заставить клиентское приложение заставить отсортировать результаты запросов, притом что в нём сортировка не предусмотрена.
Я просто сразу не понял, что речь про "Multiple Server Query", как они в доке называются.
Микрософт говорит, что нельзя :-(
Multiple Server Query Execution ordering

Хак от komrad у меня не сработал, Microsoft SQL Server Management Studio 13.0.16106.4 :-(
27 ноя 18, 14:56    [21746166]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Eleanor
Member

Откуда:
Сообщений: 2174
alexeyvg,

На 14.0.17285.0 работает.
Единственное неудобство - задержка waitfor должна быть заведомо больше, чем возможные сетевые задержки.
Мне пришлось delay между серверами делать ~100 мс. Т.е. если запрос к 50 серверам, то общее время ожидания уже не меньше 5 сек.
27 ноя 18, 15:08    [21746184]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
alexeyvg
r77
выбираю из контекстного меню группы локальных серверов -> "создать запрос"
А, вот оно что, то есть вопрос, не как заставить сервер отсортировать результат запроса, а как заставить клиентское приложение заставить отсортировать результаты запросов, притом что в нём сортировка не предусмотрена.
Я просто сразу не понял, что речь про "Multiple Server Query", как они в доке называются.
Микрософт говорит, что нельзя :-(
Multiple Server Query Execution ordering

Хак от komrad у меня не сработал, Microsoft SQL Server Management Studio 13.0.16106.4 :-(


Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (

ясно что никак, спасибо всем за ответы
27 ноя 18, 15:50    [21746241]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Eleanor
Member

Откуда:
Сообщений: 2174
r77,

Можно скачать и установить последнюю версию SSMS, где всё работает.
Старые версии Sql Server 2008 он воспринимает нормально. Если только у вас нет каких-то аддонов для старого ssms.
27 ноя 18, 16:07    [21746275]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
Eleanor
komrad,

Спасибо, ваш вариант с waitfor работает.
Мне даже подошла сортировка по первой букве, для визуального удобства чтения результатов.
declare @delay varchar(10) = '00:00:0' + CAST((ASCII(UPPER(substring(@@servername, 1, 1))) - 65)/10.0 AS varchar(10))
waitfor delay @delay
select sum(size/1024)*8/1024 GB from sys.master_files

спасибо за пруф

интересно что, в случае если все сервера начинаются с одного префикса, то вычисление задержки по первому символу не приносит желаемого результата

кстати,
select sum(size/1024)*8/1024 GB from sys.master_files
можно переписать в более лаконичное
select sum(size/128)/1024 GB from sys.master_files
где size/128 это перевод в МБ
27 ноя 18, 16:16    [21746292]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
r77
Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?
27 ноя 18, 16:18    [21746295]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
r77
Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?


на локальную переменную ругается...

Невозможно присвоить значение по умолчанию локальной переменной.
Необходимо объявить скалярную переменную "@delay".


но не на всех серверах...только на тех у кого 2005, 2008-работает
27 ноя 18, 16:26    [21746303]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
r77
Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?


надо
set @delay= '00:00:0' + CAST((ASCII(UPPER(substring(@@servername, 1, 1))) - 65)/10.0 AS varchar(10))


в 2005 надо было через set
27 ноя 18, 16:32    [21746317]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
r77
Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?


к сожалению сортировка не работает все равно, полное ассорти
27 ноя 18, 16:56    [21746348]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 5977
r77,

но ведь реально нет ни первых не вторых. Они все равноценны.
27 ноя 18, 17:00    [21746353]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
komrad
r77
Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.
27 ноя 18, 17:01    [21746355]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
alexeyvg
komrad
пропущено...

а что именно не сработало?
есть текст ошибки?
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


у меня точно также,просто не сортирует
27 ноя 18, 17:02    [21746358]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
r77
alexeyvg
пропущено...
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


у меня точно также,просто не сортирует
А, ошибся, @@servername же не обязательно равно имени зарегистрированного сервера :-)
27 ноя 18, 17:08    [21746364]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 2746
r77
komrad
пропущено...

а что именно не сработало?
есть текст ошибки?


к сожалению сортировка не работает все равно, полное ассорти

Сделать себе скрипт на PowerShell типа такого:

Set-Location SQLSERVER:\SQLRegistration\Database Engine Server Group\<your group name>
$servers = get-childitem | Sort столбец_с_именами_серверов_в_local_group -desc
foreach ($server in $server) {<do something herer>}
27 ноя 18, 17:15    [21746373]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 2746
Andy_OLAP,

Настройки для Local Server Groups обычно лежат в простом текстовом файле типа C:\Users\r77_username\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell\RegSrvr.xml
27 ноя 18, 17:16    [21746377]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 2746
Andy_OLAP
Sort столбец_с_именами_серверов_в_local_group -desc

Или Sort столбец_с_именами_серверов_в_local_group -asc, это по вкусу.
27 ноя 18, 17:17    [21746379]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
alexeyvg
komrad
пропущено...

а что именно не сработало?
есть текст ошибки?
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


+вот такой скрипт

declare @delay varchar(10) ;
with servers as 
(
select 'nlc1prodci01' [name], '05' [seconds] union all 
select 'nlc1pdbscops\sc2016', '02' [seconds] union all 
select 'nlc1pdbscdwh\scdwh16', '03' [seconds] union all 
select 'nlc1itsql05', '04' [seconds] union all 
select 'nlc1itsql03\nlc1prodsql43', '01' [seconds] union all 
select 'nlc1itsql01\nlc1prodsql41', '06' [seconds] union all 
select 'nlc1devsqlmon01', '07' [seconds] 
)

select @delay = '00:00:'+seconds
from servers 
where name=@@servername 

select @delay=isnull(@delay,'00:00:00')

waitfor delay @delay 

/*your query*/
select @delay [delay], @@servername [@@servername]



у меня выдает такой результат - см картинку

К сообщению приложен файл. Размер - 33Kb
27 ноя 18, 17:35    [21746408]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
Microsoft SQL Server Management Studio 14.0.17285.0
27 ноя 18, 17:51    [21746435]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
alexeyvg
пропущено...
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


+ вот такой скрипт

declare @delay varchar(10) ;
with servers as 
(
select 'nlc1prodci01' [name], '05' [seconds] union all 
select 'nlc1pdbscops\sc2016', '02' [seconds] union all 
select 'nlc1pdbscdwh\scdwh16', '03' [seconds] union all 
select 'nlc1itsql05', '04' [seconds] union all 
select 'nlc1itsql03\nlc1prodsql43', '01' [seconds] union all 
select 'nlc1itsql01\nlc1prodsql41', '06' [seconds] union all 
select 'nlc1devsqlmon01', '07' [seconds] 
)

select @delay = '00:00:'+seconds
from servers 
where name=@@servername 

select @delay=isnull(@delay,'00:00:00')

waitfor delay @delay 

/*your query*/
select @delay [delay], @@servername [@@servername]



у меня выдает такой результат - см картинку


у меня все delay по нулям, потому что как и написали выше
name<>@@servername
27 ноя 18, 17:53    [21746436]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
r77

у меня все delay по нулям, потому что как и написали выше
name<>@@servername


так соберите сначала реальные имена серверов, присвойте им желаемую очередность, занесите в скрипт и запускайте его
27 ноя 18, 17:57    [21746445]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
r77
у меня все delay по нулям, потому что как и написали выше
name<>@@servername


так соберите сначала реальные имена серверов, присвойте им желаемую очередность, занесите в скрипт и запускайте его


ясно,их просто много,с другой стороны это вроде как 1 раз сделать.
Благодарю за помощь, интересный подход!
27 ноя 18, 18:02    [21746454]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
r77
ясно,их просто много,с другой стороны это вроде как 1 раз сделать.
Скрипт komrad выше как раз выдайт и name, и @@servername, так что нужно просто скопировать результат.
28 ноя 18, 01:58    [21746744]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2116
У меня есть набор CLR процедур которые запускают запрос на любом количестве серверов и складируют результат в таблицу на локальном сервере. Потом можно что угодно делать, сортировать, фильтровать, джойнить и т.д. Сервера передаются либо списком через ; либо запросом где первой колонкой должно быть имя сервера. Запросы запускаются многопоточно так что работает весьма быстро, но медленне чем SSMS, потому что SSMS держит все соединения открытыми пока не закроешь окно, процедуры же открывают/закрывают коннекшн каждый раз при запуске. Зато не падает как SSMS при большом количестве серверов. На паре тысяч работало нормально. Ну и намного быстрее чем в цикле через линкованные сервера.

Сохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.

Запускается по умолчанию от учетки SQL Server-а с windows авторизацией, соответственно "главный" сервер должен иметь права на всех остальных серверах. При желании можно передать логин/пароль для каждого сервера.

Если кому интересно, могу прислать, но только AS IS. Никаких гарантий :) Успешно работает последние пару лет собирая даныне с 1,600 серверов.

+ Запуск выглядит примерно так:
-- Drop "temp" tables. If the table exists the error will be raised.
-- The new tables will be created automatically based on the schema of the query result 
IF OBJECT_ID('dbo.tmp_Test')		IS NOT NULL DROP TABLE dbo.tmp_Test
IF OBJECT_ID('dbo.tmp_TestError')	IS NOT NULL DROP TABLE dbo.tmp_TestError	-- Special table to keep all the errors

	-- This sp doesn't return any resultset, but saves the result into 2 tables
	-- Parameters:
	-- @serverNames			-- Either semicolon separated list or a valid SQL query
	-- @sqlquery			-- Query that will be executed on the servers. If the schema of resultset is different on the servers the procedure will fail
	-- @targetTable			-- Table to store the result. Will be created automatically
	-- @targetErrorTable	-- Table to store all the errors. Will be created automatically or reused if already exists
EXEC dbo.sp_RunQuerySQLServers
	@serverNames = 'select name, server_id as id from msdb.dbo.sysmanagement_shared_registered_servers_internal',
--  SQL Auth
--	@serverNames = 'select name, server_id as id, ''sa'' as login, ''###%%%$$$$'' as password from msdb.dbo.sysmanagement_shared_registered_servers_internal',
	@sqlquery = 'select sum(size/1024)*8/1024 GB from sys.master_files', 
	@targetTable = 'dbo.tmp_Test', 
	@targetErrorTable = 'dbo.tmp_TestError'

-- Results
SELECT * FROM dbo.tmp_Test ORDER BY [@ServerName]
SELECT * FROM dbo.tmp_TestError

-- Drop "temp" tables
IF OBJECT_ID('dbo.tmp_Test')		IS NOT NULL DROP TABLE dbo.tmp_Test
IF OBJECT_ID('dbo.tmp_TestError')	IS NOT NULL DROP TABLE dbo.tmp_TestError	-- Special table to keep all the errors
6 дек 18, 01:00    [21755179]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
Mind

Сохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.



думали про ##table в родительской сессии?
6 дек 18, 12:22    [21755628]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2116
komrad
Mind
Сохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.



думали про ##table в родительской сессии?
Думал. Но тогда во-первых нужно передать скрипт создания таблицы из одного из потоков в родительский, а во-вторых основной проблемы все равно не решает, что если вдруг два пользователя запустят один и тот же скрипт, то они будут конфликтовать за одну и ту же таблицу. Короче работы много чтобы это переписать, выхлоп не большой да и C# лишний раз открывать мне для этого лень. Так что пока работает как есть.

Хотя тут подумал, есть еще вариант, сохранять в глобальную временную как вы предложили, но с рандомным именем, а после того как все потоки отработают, создавать локальную временную, переливать данные и грохать глобальную. Вроде должно работать, хотя и не очень элегантно выглядит.
11 дек 18, 01:37    [21759714]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
Mind
Хотя тут подумал, есть еще вариант, сохранять в глобальную временную как вы предложили, но с рандомным именем, а после того как все потоки отработают, создавать локальную временную, переливать данные и грохать глобальную. Вроде должно работать, хотя и не очень элегантно выглядит.


еще вариант: использовать одну глобальную временную + уникальный идентификатор запуска
это позволит нескольким сессиям использовать одну и ту же таблицу и идентифицировать свои записи по идентификатору
11 дек 18, 11:50    [21760034]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить