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

Откуда:
Сообщений: 4
Добрый день.
У меня на SQL сервере установлено много баз 1с. В каждой базе есть вот эта таблица "dbo.v8users" из нее мне нужно получить несколько столбцов.
Из одной базы я получаю их вот так "SELECT * FROM base1c.dbo.v8users;". Но мне нужно одним запросом получить столбцы этой таблицы из всех баз. Как нужно сделать цикл?
P.S Это мой первый код в SQL
19 фев 14, 15:10    [15590658]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
islam786
Но мне нужно одним запросом получить столбцы этой таблицы из всех баз. Как нужно сделать цикл?
Либо сделать цикл, используя курсор (см. DECLARE CURSOR и WHILE)
Либо сделать вьюху с объединением всех dbo.v8users из нужных баз (см. CREATE VIEW)
19 фев 14, 15:19    [15590761]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
vartAG
Member

Откуда:
Сообщений: 17
Либо можешь иднамический вопрос написать, что-то типо этого:

declare @ex varchar(max)

select @ex = ''

select @ex = @ex + 'select ''' + t.name + ''' as base, Column as Col from ' + t.name + '.dbo.Table union all '
from master.sys.databases t
where name like '%test%'

select @ex = SUBSTRING(@ex, 1, LEN(@ex) - 10)

select @ex

exec(@ex)
19 фев 14, 15:53    [15591079]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
sp_msforeachdb
20 фев 14, 07:53    [15595209]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
MX_User
Member

Откуда:
Сообщений: 27
Я что-то недопонял?
SELECT * FROM base1c.dbo.v8users
UNION 
SELECT * FROM 2_base1c.dbo.v8users
UNION 
SELECT * FROM 3_base1c.dbo.v8users
20 фев 14, 10:20    [15595775]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35871
Блог
exec sp_msforeachdb 'USE ?; SELECT * FROM dbo.v8users'
20 фев 14, 11:56    [15596681]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
vartAG
Member

Откуда:
Сообщений: 17
Критик,

Результирующих таблиц будет множество, как я понял автору этот вариант не подходит. Хотя может я его недопонял )
20 фев 14, 12:09    [15596820]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
MX_User
Member

Откуда:
Сообщений: 27
vartAG,
Результирующий таблиц будет один, при использовании union
20 фев 14, 13:29    [15597720]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
MX_User
Member

Откуда:
Сообщений: 27
MX_User
vartAG,
Результирующий таблиц будет один, при использовании union

Сорри, не то посмотрел
20 фев 14, 13:30    [15597734]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
islam786
Member

Откуда:
Сообщений: 4
Спасибо всем. Решил сделать для каждой базы отдельно. Теперь другой вопрос. Есть база в названии которой есть знак "-", поэтому выдается ошибка "Неправильный синтаксис около конструкции "-".". Менять название базы не хочется потому, что придется менять у всех пользователей, а их много. Как можно указать имя базы что бы не было ошибок?
20 фев 14, 14:09    [15598222]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
Glory
Member

Откуда:
Сообщений: 104751
[есть база в названии которой есть знак -]
20 фев 14, 14:11    [15598241]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
islam786
Member

Откуда:
Сообщений: 4
Спасибо Glory,
20 фев 14, 14:13    [15598260]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
islam786
Member

Откуда:
Сообщений: 4
Спасибо большое. С этим я разобрался. Теперь другой вопрос. Как настроить права пользователя на сервер так, что бы он мог только использовать этот запрос и больше ничего на сервере не мог делать?
20 фев 14, 14:23    [15598354]     Ответить | Цитировать Сообщить модератору
 Re: Цикл для баз  [new]
Glory
Member

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

В каждой базе назначить этому пользователю права на данную таблицу
20 фев 14, 14:31    [15598439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить