0

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

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

我收到以下错误:

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

以下是应用程序设置存储过程的方式(它说的是 PL/SQL,但它是针对 SQL Server 数据库的。) 在此处输入图像描述

在此处输入图像描述

这是应用程序中的连接字符串(参见第一个屏幕截图中的连接 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 中是否可以跨数据库执行存储过程?我在这里读到这是不可能的,或者这篇文章是指跨数据库连接的其他方面。

4

0 回答 0