我有几个名为非常相似的数据库(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
Execution2:
my-db-1
my-db-2
Execution3:
my-db-1
my-db-2
my-db-3
my-db-4
Execution4:
my-db-1
它似乎完全随机。有时我会在10次执行后打印所有4个数据库。有时仅执行2次后,只会打印1个数据库。
此SQL正在Microsoft SQL Server 2008 R2(RTM)上执行 - 10.50.1600.1(X64)2010年4月2日15:48:46版权所有(c)Windows NT 6.1上的Microsoft Corporation Developer Edition(64位) 7600 :)通过Microsoft SQL Server Management Studio 10.50.1600.1
有没有人有任何想法?
答案 0 :(得分:0)