Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Gexan Member Откуда: Spb Сообщений: 35 |
Доброго времени суток Хочется написать универсальный скрипт который можно распространить на энное количество серверов На серверах базы называются по разному, но выловить их можно Что то вроде SELECT NAME FROM sys.databases WHERE name like 'PAD%' Проблема в том как потом запихать это имя базы в команду USE? |
24 авг 12, 15:18 [13060480] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Gexan, можно же в цикле формировать строку запуска sqlcmd и выполнять с помощью xp_cmdshell? Только надо учесть, что xp_cmdshell будет работать на сервере, а не локально |
24 авг 12, 15:37 [13060627] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Поэтому может быть технически трудно выполнять его напрямую в динамическом SQL |
||
24 авг 12, 15:39 [13060651] Ответить | Цитировать Сообщить модератору |
Gexan Member Откуда: Spb Сообщений: 35 |
Проблема не в том как запустить этот скрипт на удаленной машине :) Выложу весь скрипт чтобы было более наглядно Суть скрипта: Создать пользователя (доменная группа) с правами запуска трех процедур из БД и возможностью запуска джобов в агенте CREATE LOGIN [Domain\Group] FROM WINDOWS USE [Database] ---<-Вот тут проблема----- CREATE USER [Domain\Group] FOR LOGIN [Domain\Group] GRANT Execute ON Procedure1 TO [Domain\Group] GRANT Execute ON Procedure2 TO [Domain\Group] USE master GRANT exec ON sys.xp_cmdshell TO [Domain\Group] ------Для запуска одной из процедур необходим xp_cmdshell---- GRANT exec ON Procedure3 TO [Domain\Group]-------Тоже нужно :) USE msdb EXEC sp_addrolemember 'SQLAgentOperatorRole', 'Domain\Group' ПЫСЫ Если что сильно не пинать я только учусс :) |
24 авг 12, 15:51 [13060729] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Курсор по базам + цикл по курсору + формирование динамического SQL с именем базы + EXECUTE(@SQL) в цикле |
||
24 авг 12, 15:54 [13060756] Ответить | Цитировать Сообщить модератору |
Gexan Member Откуда: Spb Сообщений: 35 |
Ок спасибо бум пробовать :) |
24 авг 12, 16:03 [13060809] Ответить | Цитировать Сообщить модератору |
Gexan Member Откуда: Spb Сообщений: 35 |
Решил вопрос проще DECLARE @DBNAME varchar(50) DECLARE @Command varchar(1000) SELECT NAME FROM sys.databases WHERE name like '%Признак%' SET @MyCommand = 'USE [' + @DBNAME + '];-- команда для выполнения на данной базе, например Select * from sys.columns;---' EXECUTE(@Command) |
7 сен 12, 13:22 [13129452] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Только вот после EXECUTE(@Command) контекст базы будет вовсе не тот, что вы думаете |
||
7 сен 12, 13:24 [13129474] Ответить | Цитировать Сообщить модератору |
Gexan Member Откуда: Spb Сообщений: 35 |
Извиняйте поправил :) DECLARE @DBNAME varchar(50) DECLARE @Command varchar(1000) SELECT NAME FROM sys.databases WHERE name like '%Признак%' SET @Command = 'USE [' + @DBNAME + '];-- команда для выполнения на данной базе, например Select * from sys.columns;---' EXECUTE(@Command) |
7 сен 12, 13:25 [13129491] Ответить | Цитировать Сообщить модератору |
Gexan Member Откуда: Spb Сообщений: 35 |
Glory, согласен написал немного не в тему :) Тот скрипт который был выше уже решился другим способом Проблема поднялась вновь буквально сегодня, но она ограничилась выполнением пары команд в базе Собссно эту проблему решил таким способом :) |
7 сен 12, 13:29 [13129523] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И чем это лучше выбора базы из списка в той же студии ? ЗЫ Кстати, в переменную @DBNAME так ничего и не попадает |
||
7 сен 12, 13:46 [13129677] Ответить | Цитировать Сообщить модератору |
Gexan Member Откуда: Spb Сообщений: 35 |
Сорри опять накосячил ![]() DECLARE @DBNAME varchar(50) DECLARE @Command varchar(1000) SELECT @DBNAME = NAME FROM sys.databases WHERE name like '%Признак%' SET @Command = 'USE [' + @DBNAME + '];-- команда для выполнения на данной базе, например Select * from sys.columns;---' EXECUTE(@Command) В моем случае это лучше тем что не нужно подключаться к каждому серверу, коих немало, выбирать базу и.т.д., а просто раскидать этот скрипт на каждый сервер удаленно. Пысы сильно не пинайте я только учусь) |
7 сен 12, 13:53 [13129752] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Оба-на. А этот скрипт может выполняться без подключения к серверу ??? |
||
7 сен 12, 13:55 [13129769] Ответить | Цитировать Сообщить модератору |
Gexan Member Откуда: Spb Сообщений: 35 |
За подключение к серверу отвечает уже другой скрипт :) |
7 сен 12, 13:56 [13129781] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |