存储过程的跨数据库执行

时间:2018-11-14 21:38:34

标签: sql-server sql-server-2008 cross-database quorum

我有一个应用程序(简称为App1),其主数据库为 Home1 。我的任务是在数据库 Home2 中创建存储过程(简称为SP1)。使用应用程序中与数据库 Home2 的连接,我应该执行存储过程,该过程通过应用程序对 Home2 中的两个表进行了一系列简单的更新,将更新 Home2 中的某些表。

我尝试修改存储过程的安全性,以授予用户Home1执行和查看定义的权限,但是我仍然无法使其运行。

我收到以下错误:

  

参数计数不匹配:App1 = 4存储过程= -1过程名称= SP1

这是应用程序设置存储过程的方式(它显示为PL / SQL,但适用于SQL Server数据库。) enter image description here

enter image description here

这是应用程序中的连接字符串(请参阅第一个屏幕截图上的连接ID): PROVIDER = SQLNCLI10; DATA SOURCE = Home2; INITIAL CATALOG = Home2; PERSIST SECURITY INFO = FALSE;

代码如下:

CREATE PROCEDURE dbo.SP1
    @pStatus varchar(6),  
    @pProcessQueueId numeric(10,0), 
    @pInvoiceNo varchar(30), 
    @pInvoiceSeqNo varchar(3)
 BEGIN TRANSACTION  
    Begin Try
        declare @pSyncDate datetime
        if @pStatus is null
            set @pSyncDate = null
        else
            set @pSyncDate = getdate()

        if @pInvoiceNo is null
        Begin
            update dbo.TABLE1
            set SYNC_DT = @pSyncDate, STATUS_CD =  @pStatus
            where PROCESS_QUEUE_ID = @pProcessQueueId

            update dbo.TABLE2
            set SYNC_DT = @pSyncDate, STATUS_CD =  @pStatus
            where PROCESS_QUEUE_ID = @pProcessQueueId
         End

        if @pInvoiceNo is not null and @pInvoiceSeqNo is null
        Begin
            update dbo.TABLE1
            set SYNC_DT = @pSyncDate, STATUS_CD = @pStatus
            where PROCESS_QUEUE_ID = @pProcessQueueId   
            and INVOICE_NO = @pInvoiceNo

            update dbo.TABLE2
            set SYNC_DT = @pSyncDate, STATUS_CD = @pStatus
            where PROCESS_QUEUE_ID = @pProcessQueueId
            and INVOICE_NO = @pInvoiceNo
        End

        if @pInvoiceNo is not null and @pInvoiceSeqNo is not null
        Begin
            update dbo.TABLE1
            set SYNC_DT = @pSyncDate, STATUS_CD = @pStatus
            where PROCESS_QUEUE_ID = @pProcessQueueId 
            and INVOICE_NO = @pInvoiceNo
            and INVOICE_SEQ = @pInvoiceSeqNo

            update dbo.TABLE2
            set SYNC_DT = @pSyncDate, STATUS_CD = @pStatus
            where PROCESS_QUEUE_ID = @pProcessQueueId
            and INVOICE_NO = @pInvoiceNo
            and INVOICE_SEQ = @pInvoiceSeqNo
         End
    COMMIT TRANSACTION
    End Try

在SQL Server 2008中是否可以跨数据库执行存储过程?我读过here,这是不可能的,或者这篇文章是指跨数据库连接的其他方面。

0 个答案:

没有答案