Use和DB.sp_execute之间的区别

时间:2011-12-16 14:12:45

标签: sql sql-server-2008 tsql

我已经意识到有两种方法可以在不同的数据库上运行动态字符串:

第一个是以下内容:

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 个答案:

答案 0 :(得分:2)

Use设置当前会话的数据库上下文,而在exec语句中,您只告诉它只使用该语句的数据库。在exec语句之后,您的会话的数据库上下文不会对您运行的内容进行更改。

因此,就你的例子而言,没有任何功能差异。从更一般的意义上说,有一个相当大的。

你也可以这样做:

select * from MyDatabase.dbo.MyTable

这将从您的上下文之外的其他数据库中提取数据。您可以使用它来连接数据库之间的数据,就像您进行常规连接一样。