различия между Use и DB.sp_execute - PullRequest
1 голос
/ 16 декабря 2011

Я понял, что есть 2 способа запуска динамической строки в другой базе данных:

первый следующий:

declare @sql nvarchar(max)
set @sql = 'select 1'
exec MyDatabase.sp_execute @sql 

второй будет:

declare @sql nvarchar(max)
set @sql = 'Use MyDatabase
            select 1'
exec sp_execute @sql 

Кто-нибудь может указать на различия между двумя подходами? Если одно лучше другого и почему?

1 Ответ

2 голосов
/ 16 декабря 2011

Use устанавливает контекст базы данных для текущего сеанса, в то время как в вашем операторе exec вы указываете, какую базу данных использовать только для оператора. После оператора exec контекст базы данных вашего сеанса не изменится на то, что вы запустили.

Итак, в вашем примере функциональной разницы нет. В более общем смысле, он довольно большой.

Вы также можете сделать это:

select * from MyDatabase.dbo.MyTable

Это будет извлекать данные из другой базы данных, чем ваш контекст. Вы также можете использовать это для объединения данных между базами данных, так же, как вы делаете обычные объединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...