我已经意识到有两种方法可以在不同的数据库上运行动态字符串:
第一个是以下内容:
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
有人能指出两种方法之间的差异吗?如果一个比另一个好,为什么?
答案 0 :(得分:2)
Use
设置当前会话的数据库上下文,而在exec
语句中,您只告诉它只使用该语句的数据库。在exec
语句之后,您的会话的数据库上下文不会对您运行的内容进行更改。
因此,就你的例子而言,没有任何功能差异。从更一般的意义上说,有一个相当大的。
你也可以这样做:
select * from MyDatabase.dbo.MyTable
这将从您的上下文之外的其他数据库中提取数据。您可以使用它来连接数据库之间的数据,就像您进行常规连接一样。