powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группа локальных серверов
43 сообщений из 43, показаны все 2 страниц
Группа локальных серверов
    #39736651
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
Добрый день!

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

Спасибо.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736719
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
order by
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736727
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
Гавриленко Сергей Алексеевичorder by

Очень смешно! Меня само собой интересует параметр по которому ORDER BY...!
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736728
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77Гавриленко Сергей Алексеевичorder by

Очень смешно! Меня само собой интересует параметр по которому ORDER BY...!
ORDER BY [наименованиям серверов]
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736730
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевичorder by
))))

По сабжу:
Вроде бы никак не отсортировать. И уж точно - не директивой в запросе.
Т.к. такое представление - это самодеятельность SSMS.
Она открывает тучу коннектов к серверам, складирует результаты от каждого, а потом выводит с меткой сервера каждый отдельный резалтсет в одной таблице.
Этот резалтсет не настоящий. Его студия внутри себя создала. И сортировать его, соответственно, тоже она должна.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736815
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
uaggsterГавриленко Сергей Алексеевичorder by
))))

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

возвращается список каждый раз хаотично,не очень удобно, спасибо за ответ, так и думала.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736844
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77,

самое смешное, что имя сервера отображается в первой колонке. Вы какую версию SSMS используете? Установите последнюю, если сервер выше 2012.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736904
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
Владислав Колосовr77,

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

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

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

2008, спасибо, другую версию я не могу установить и использовать
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736911
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77Владислав Колосовr77,

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

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

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

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

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

например так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
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 ..... 



...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736913
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опечатка в скрипте :
вместо
Код: plaintext
select @delay = '00:00:'+name 
должно быть
Код: plaintext
select @delay = '00:00:'+seconds
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39736946
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
komradопечатка в скрипте :
вместо
Код: plaintext
select @delay = '00:00:'+name 
должно быть
Код: plaintext
select @delay = '00:00:'+seconds


благодарю,попробую
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39738079
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77Добрый день!

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

Спасибо.
А добавить в каждый select столбец с именем сервера, к которому сделан запрос, нельзя?
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39738253
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryir77Добрый день!

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

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

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

у автора хотелка, чтобы общая выборка была отсортирована по имени сервера
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39738278
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77Добрый день!

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

Спасибо.Если СЕЛЕКТ делаете именно Вы (а не сторонняя утилита), помещайте результат в врем. таблицу и потом сортируйте.
Ну или помещайте в Эксель и сортируйте. :)
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39738296
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komradDaniilSeryiпропущено...

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

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

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


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

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

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

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


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

ORDER BY [имя сервера] = ошибка
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739101
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad,

Спасибо, ваш вариант с waitfor работает.
Мне даже подошла сортировка по первой букве, для визуального удобства чтения результатов.
Код: sql
1.
2.
3.
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
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739167
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77выбираю из контекстного меню группы локальных серверов -> "создать запрос"А, вот оно что, то есть вопрос, не как заставить сервер отсортировать результат запроса, а как заставить клиентское приложение заставить отсортировать результаты запросов, притом что в нём сортировка не предусмотрена.
Я просто сразу не понял, что речь про "Multiple Server Query", как они в доке называются.
Микрософт говорит, что нельзя :-(
Multiple Server Query Execution ordering

Хак от komrad у меня не сработал, Microsoft SQL Server Management Studio 13.0.16106.4 :-(
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739178
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

На 14.0.17285.0 работает.
Единственное неудобство - задержка waitfor должна быть заведомо больше, чем возможные сетевые задержки.
Мне пришлось delay между серверами делать ~100 мс. Т.е. если запрос к 50 серверам, то общее время ожидания уже не меньше 5 сек.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739208
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
alexeyvgr77выбираю из контекстного меню группы локальных серверов -> "создать запрос"А, вот оно что, то есть вопрос, не как заставить сервер отсортировать результат запроса, а как заставить клиентское приложение заставить отсортировать результаты запросов, притом что в нём сортировка не предусмотрена.
Я просто сразу не понял, что речь про "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, само собой у меня тоже не сработал (

ясно что никак, спасибо всем за ответы
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739217
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77,

Можно скачать и установить последнюю версию SSMS , где всё работает.
Старые версии Sql Server 2008 он воспринимает нормально. Если только у вас нет каких-то аддонов для старого ssms.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739221
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eleanorkomrad,

Спасибо, ваш вариант с waitfor работает.
Мне даже подошла сортировка по первой букве, для визуального удобства чтения результатов.
Код: sql
1.
2.
3.
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


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

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

кстати,
Код: plaintext
select sum(size/1024)*8/1024 GB from sys.master_files
можно переписать в более лаконичное
Код: plaintext
select sum(size/128)/1024 GB from sys.master_files
где size/128 это перевод в МБ
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739222
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739228
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
komradr77Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


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

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

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



но не на всех серверах...только на тех у кого 2005, 2008-работает
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739236
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
komradr77Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


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

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



в 2005 надо было через set
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739258
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
komradr77Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


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

к сожалению сортировка не работает все равно, полное ассорти
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739264
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77,

но ведь реально нет ни первых не вторых. Они все равноценны.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739266
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komradr77Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739267
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
alexeyvgkomradпропущено...

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

у меня точно также,просто не сортирует
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739271
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77alexeyvgпропущено...
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.

у меня точно также,просто не сортируетА, ошибся, @@servername же не обязательно равно имени зарегистрированного сервера :-)
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739275
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77komradпропущено...

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

к сожалению сортировка не работает все равно, полное ассорти
Сделать себе скрипт на 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>}
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739278
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

Настройки для Local Server Groups обычно лежат в простом текстовом файле типа C:\Users\r77_username\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell\RegSrvr.xml
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739280
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPSort столбец_с_именами_серверов_в_local_group -desc

Или Sort столбец_с_именами_серверов_в_local_group -asc, это по вкусу.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739290
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgkomradпропущено...

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

вот такой скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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]




у меня выдает такой результат - см картинку
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739306
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Microsoft SQL Server Management Studio 14.0.17285.0
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739307
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
komradalexeyvgпропущено...
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.

вот такой скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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 по нулям, потому что как и написали выше
Код: sql
1.
name<>@@servername
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739312
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77
у меня все delay по нулям, потому что как и написали выше
Код: sql
1.
name<>@@servername



так соберите сначала реальные имена серверов, присвойте им желаемую очередность, занесите в скрипт и запускайте его
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739317
r77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r77
Гость
komradr77у меня все delay по нулям, потому что как и написали выше
Код: sql
1.
name<>@@servername



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

ясно,их просто много,с другой стороны это вроде как 1 раз сделать.
Благодарю за помощь, интересный подход!
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39739478
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r77ясно,их просто много,с другой стороны это вроде как 1 раз сделать.Скрипт komrad выше как раз выдайт и name, и @@servername, так что нужно просто скопировать результат.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39743196
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть набор CLR процедур которые запускают запрос на любом количестве серверов и складируют результат в таблицу на локальном сервере. Потом можно что угодно делать, сортировать, фильтровать, джойнить и т.д. Сервера передаются либо списком через ; либо запросом где первой колонкой должно быть имя сервера. Запросы запускаются многопоточно так что работает весьма быстро, но медленне чем SSMS, потому что SSMS держит все соединения открытыми пока не закроешь окно, процедуры же открывают/закрывают коннекшн каждый раз при запуске. Зато не падает как SSMS при большом количестве серверов. На паре тысяч работало нормально. Ну и намного быстрее чем в цикле через линкованные сервера.

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

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

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

Запуск выглядит примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-- 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

...
Рейтинг: 0 / 0
Группа локальных серверов
    #39743384
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mind
Сохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.



думали про ##table в родительской сессии?
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39745686
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komradMindСохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.



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

Хотя тут подумал, есть еще вариант, сохранять в глобальную временную как вы предложили, но с рандомным именем, а после того как все потоки отработают, создавать локальную временную, переливать данные и грохать глобальную. Вроде должно работать, хотя и не очень элегантно выглядит.
...
Рейтинг: 0 / 0
Группа локальных серверов
    #39745871
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindХотя тут подумал, есть еще вариант, сохранять в глобальную временную как вы предложили, но с рандомным именем, а после того как все потоки отработают, создавать локальную временную, переливать данные и грохать глобальную. Вроде должно работать, хотя и не очень элегантно выглядит.

еще вариант: использовать одну глобальную временную + уникальный идентификатор запуска
это позволит нескольким сессиям использовать одну и ту же таблицу и идентифицировать свои записи по идентификатору
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группа локальных серверов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]