【发布时间】:2014-04-11 09:13:30
【问题描述】:
我正在使用 SQL Server 2012 Express。
我正在使用 Service Broker 异步运行存储过程。
激活过程必须访问另一个数据库才能执行另一个存储过程。这是代码:
CREATE PROCEDURE [dbo].[GetNewCodes]
@gintNewCodes bigint,
@presNewCodes tinyint,
@levelNewCodes bigint,
@quantityNewCodes smallint
AS
-- Get new codes from INCIC database.
DECLARE @return_value int,
@xmlGenerated xml,
@xmlString NVARCHAR(MAX)
SET NOCOUNT ON;
-- Set that this stored procedure is running
update dbo.RunningSPs with (serializable) set conf_value = 1
where sp_name = N'GetNewCodes'
if @@rowcount = 0
begin
insert dbo.RunningSPs(sp_name, conf_value) values (N'GetNewCodes', 1)
end
EXEC @return_value = [INCIC].[dbo].[ReadCodeBuffer]
@gint = @gintNewCodes,
@pres = @presNewCodes,
@level = @levelNewCodes,
@quantity = @quantityNewCodes,
@xmlGenerated = @xmlGenerated OUTPUT
SET @xmlString = cast(@xmlGenerated as nvarchar(max))
-- Process these new codes on TRZ.
EXEC dbo.ProcessCodes @XmlString = @xmlString
-- Update that we are not running this procedure any more.
update dbo.RunningSPs with (serializable) set conf_value = 0
where sp_name = N'GetNewCodes'
if @@rowcount = 0
begin
insert dbo.RunningSPs(sp_name, conf_value) values (N'GetNewCodes', 0)
end
问题出在这里:[INCIC].[dbo].[ReadCodeBuffer],错误信息是:
错误:50000
过程 GetNewCodes 中出现不可恢复的错误:916:服务器主体“sa”无法在当前安全上下文下访问数据库“INCIC”。
我已经按照tutorial 实现了服务、队列和激活存储过程。
我该如何解决这个问题?
【问题讨论】:
标签: sql-server tsql stored-procedures service-broker sql-server-2012-express