У меня есть несколько очень похожих баз данных (my-db-1, my-db-2, my-db-3, my-db-4).Я хочу выполнить одну и ту же хранимую процедуру для каждой из этих баз данных.Я решил использовать курсоры.Тем не менее, я получаю некоторые странные проблемы.Сначала вот мой простой код, который я выполняю через SQL Server Management Studio 2008.
DECLARE @db_cursor CURSOR
DECLARE @name varchar(255)
DECLARE @Sql nvarchar(4000)
SET @db_cursor = CURSOR FOR
SELECT name FROM sys.databases WHERE name LIKE 'my-db-%'
OPEN @db_cursor
FETCH NEXT FROM @db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Sql = 'Use [' + @name + ']; PRINT DB_NAME();'
exec sp_sqlexec @Sql
FETCH NEXT FROM @db_cursor INTO @name
END
CLOSE @db_cursor
DEALLOCATE @db_cursor
При выполнении этого несколько раз подряд в течение 2 секунд я получаю странные результаты:
Execution1:
my-db-1
my-db-2
my-db-3
my-db-4
Выполнение2:
my-db-1
my-db-2
Выполнение3:
my-db-1
my-db-2
my-db-3
my-db-4
Выполнение4:
my-db-1
Кажется, что оно совершенно случайно.Иногда я получаю все 4 базы данных для печати после 10 выполнений.Иногда после двух выполнений будет напечатана только 1 база данных.
Этот SQL выполняется на Microsoft SQL Server 2008 R2 (окончательная первоначальная версия) - 10.50.1600.1 (X64) 2 апреля 2010 15:48:46 Copyright (c)Microsoft Corporation Developer Edition (64-разрядная версия) для Windows NT 6.1 (сборка 7600:) через Microsoft SQL Server Management Studio 10.50.1600.1
У кого-нибудь есть идеи?