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

Откуда:
Сообщений: 15
Добрый день, Товарищи.
Такой вопрос:
Допустим у нас есть 15 баз, структура которых одинакова и именуются они по принципу DB01, DB02.. и т.д. до DB15.

Выполняю запрос вида:
declare @db int, @sql nvarchar(20), @res int
select @db=1
while @db<=15
	begin
        if @db<10
	   set @sql=N'use DB0'+CAST(@db as varchar)
        else 
           set @sql=N'use DB'+CAST(@db as varchar)

       exec sp_executeSql @sql
       SELECT @res=@res+COUNT(ID) FROM Table
       set @db=@db+1
       end

       select @res

Для проверки сделал скрипт вручную 15 из каждой базы выдирающий значение, такого вида:
declare @res int
select @res=0
use DB01
SELECT @res=@res+COUNT(ID) FROM Table
use DB02
SELECT @res=@res+COUNT(ID) FROM Table

и т.д. до 15

Так вот, суммарное значение @res различаются. И судя по пошаговому выводу суммы (в случае первого скрипта) реально скрипт выполняется на одной и тойже базе. То есть строчка
 exec sp_executeSql @sql
не дает ожидаемого результата.

Почему так, и есть ли альтернативные способы решения такой задачи?
5 ноя 09, 14:03    [7885923]     Ответить | Цитировать Сообщить модератору
 Re: принцип работы sp_ExecuteSql  [new]
Glory
Member

Откуда:
Сообщений: 104760
jHotMan

Почему так, и есть ли альтернативные способы решения такой задачи?

Потому что контекст базы возращается к первоначальному по окончании динамического запроса
5 ноя 09, 14:05    [7885939]     Ответить | Цитировать Сообщить модератору
 Re: принцип работы sp_ExecuteSql  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Перебор БД
5 ноя 09, 14:13    [7886005]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить