我需要调用另一个数据库中的存储过程并检查返回值。其他数据库的名称可能会有所不同,因此我尝试使用 sp_executesql,但我无法找到如何从过程中获取返回值。
这是我所拥有的简化版本:
DECLARE @errorLogId INT
DECLARE @otherDbName NVARCHAR(MAX) = 'Foo' -- Get the database name from somewhere
DECLARE @sql NVARCHAR(MAX)
SET @sql = @otherDbName + '.dbo.SomeProc'
-- I want @errorLogId to be the return value from SomeProc, this didn't work.
EXECUTE @errorLogId = sp_executesql @sql
IF @errorLogId <> 0
RAISERROR('SomeProc failed, ErrorLogId = %d.', 16, 1, @errorLogId) WITH SETERROR
如果在 SomeProc 中发生错误,它会被捕获并将条目写入错误表(在另一个数据库中),然后 SomeProc 返回已写入记录的错误表 ID(身份)。否则 SomeProc 返回 0。
我知道 SomeProc 失败了,因为错误被写入另一个数据库中的错误日志,但在本地数据库中 @errorLogId 为 0 被视为成功。我认为返回值会“通过”sp_executesql,但我认为返回值实际上来自 sp_executesql 而不是 SomeProc(即无论 SomeProc 成功还是失败,sp_executesql 都可以成功)。
有没有办法从本地数据库中的 @otherDbName.dbo.SomeProc 访问返回值?
谢谢