Очень странное поведение. Если бы я догадался, я бы сказал, что это контекст «базы данных использования», расположенной в верхней части метки: Я бы никогда не использовал бы метку в T-SQL, кроме вашего вызова.
Выходные данные этого теста показывают, что он проходит правильные движения, но просто безуспешно. Если вы раскомментируете строку с пометкой <<< и прокомментируете строку над ней, она будет работать правильно </p>
set nocount on
use tempdb
create database db1
create database db2
GO
use db1
mylabel:
print 'in-' + db_name()
if NOT EXISTS (select * from sys.objects where name = 'MyTable' and type = 'U' )
begin
print 'create-' + db_name()
create table MyTable(MyColumn int not null)
-- exec ('create table MyTable(MyColumn int not null)') -- <<<
end
if(DB_NAME()='db1')
begin
print 'switch'
use db2
goto mylabel
end
GO
use tempdb
drop database db1
drop database db2
выход:
in-db1
create-db1
switch
in-db2
create-db2
Msg 2714, Level 16, State 6, Line 9
There is already an object named 'MyTable' in the database.