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

Откуда: Spb
Сообщений: 35
Доброго времени суток

Хочется написать универсальный скрипт который можно распространить на энное количество серверов

На серверах базы называются по разному, но выловить их можно
Что то вроде
SELECT NAME FROM sys.databases WHERE name like 'PAD%'

Проблема в том как потом запихать это имя базы в команду USE?
24 авг 12, 15:18    [13060480]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Gexan,

можно же в цикле формировать строку запуска sqlcmd
и выполнять с помощью xp_cmdshell?
Только надо учесть, что xp_cmdshell будет работать на сервере, а не локально
24 авг 12, 15:37    [13060627]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
iap
Gexan,

можно же в цикле формировать строку запуска sqlcmd
и выполнять с помощью xp_cmdshell?
Только надо учесть, что xp_cmdshell будет работать на сервере, а не локально
Это я держу в голове, что скрипт может содержать динамические запросы, например, или литеральные строки.
Поэтому может быть технически трудно выполнять его напрямую в динамическом SQL
24 авг 12, 15:39    [13060651]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Gexan
Проблема не в том как запустить этот скрипт на удаленной машине :)

Выложу весь скрипт чтобы было более наглядно

Суть скрипта:
Создать пользователя (доменная группа) с правами запуска трех процедур из БД и возможностью запуска джобов в агенте

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'


ПЫСЫ Если что сильно не пинать я только учусс :)
А где проблема-то?
Курсор по базам + цикл по курсору + формирование динамического SQL с именем базы + EXECUTE(@SQL) в цикле
24 авг 12, 15:54    [13060756]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
Gexan
Member

Откуда: Spb
Сообщений: 35
Ок спасибо бум пробовать :)
24 авг 12, 16:03    [13060809]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
Glory
Member

Откуда:
Сообщений: 104751
Gexan
Решил вопрос проще

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)

Только вот после EXECUTE(@Command) контекст базы будет вовсе не тот, что вы думаете
7 сен 12, 13:24    [13129474]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
Gexan
Member

Откуда: Spb
Сообщений: 35
Glory,

согласен
написал немного не в тему :)
Тот скрипт который был выше уже решился другим способом

Проблема поднялась вновь буквально сегодня, но она ограничилась выполнением пары команд в базе
Собссно эту проблему решил таким способом :)
7 сен 12, 13:29    [13129523]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
Glory
Member

Откуда:
Сообщений: 104751
Gexan
Проблема поднялась вновь буквально сегодня, но она ограничилась выполнением пары команд в базе
Собссно эту проблему решил таким способом :)

И чем это лучше выбора базы из списка в той же студии ?

ЗЫ
Кстати, в переменную @DBNAME так ничего и не попадает
7 сен 12, 13:46    [13129677]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
Glory
Member

Откуда:
Сообщений: 104751
Gexan
В моем случае это лучше тем что не нужно подключаться к каждому серверу, коих немало, выбирать базу и.т.д., а просто раскидать этот скрипт на каждый сервер удаленно.

Оба-на. А этот скрипт может выполняться без подключения к серверу ???
7 сен 12, 13:55    [13129769]     Ответить | Цитировать Сообщить модератору
 Re: Команда USE  [new]
Gexan
Member

Откуда: Spb
Сообщений: 35
За подключение к серверу отвечает уже другой скрипт :)
7 сен 12, 13:56    [13129781]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить