Спасибо за информацию, Младен, этот совет полезно знать:)
Но в то время как это помогает мне вызывать функцию, находящуюся в master в текущем контексте базы данных "ContextCurrent", я действительно хочу иметь возможность вызывать скалярную функцию из контекста исходной базы данных "ContextSource".
Хотя в целом у меня есть резервирование для динамического sql, я использовал его здесь следующим образом.
<br/>DECLARE @sourceDbName nvarchar(128)
<br/>SET @sourceDbName = N'sbaportia1'
<br/>
<br/>DECLARE @strQuery nvarchar(max)
<br/>DECLARE @parmDefn nvarchar(max)
<br/>DECLARE @DbtsCapture varbinary(8)
<br/>SET @strQuery =
<br/> '
<br/> N' ' + N'USE' + N' ' + @sourceDbName + N' '
<br/> + N' ' + N'SELECT @dbtsCapture = min_active_rowversion()'
<br/> '
<br/>
<br/>SET @parmDefn =
<br/> N'
<br/> @dbName varchar(128),
<br/> @dbtsCapture varbinary(8) OUTPUT
<br/> '
<br/>
<br/>EXEC sp_executesql @strQuery
<br/> ,@parmDefn
<br/> ,@dbName = 'autobahn'
<br/> ,@dbtsCapture = @dbtsCapture OUTPUT
<br/>
<br/>SELECT @dbtsCapture
Кроме того, поскольку sp_executesql работает в отдельном потоке,
контекст базы данных в скрипте ниже будет
автоматически будет таким же при выходе из sp_executesql
как при входе в sp_executesql.
(Я слишком много узнал о sp_executesql в начале 2000-х годов.)