Sql 使用和DB.sp_执行之间的差异
我意识到在不同的数据库上运行动态字符串有两种方法: 第一个是:Sql 使用和DB.sp_执行之间的差异,sql,sql-server-2008,tsql,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 有人能指出这两种方法之间的区别吗?如果其中一个比另一个好,为
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
有人能指出这两种方法之间的区别吗?如果其中一个比另一个好,为什么?
使用
设置当前会话的数据库上下文,而在exec
语句中,您告诉它只对该语句使用哪个数据库。执行exec
语句后,会话的数据库上下文将不会更改您运行的内容
所以,在你的例子中,没有函数上的区别。在更一般的意义上,有一个相当大的问题
您也可以这样做:
select * from MyDatabase.dbo.MyTable
这将从上下文之外的另一个数据库中提取数据。您也可以使用它在数据库之间连接数据,就像执行普通连接一样