我有一个应用程序(我们称之为 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 中是否可以跨数据库执行存储过程?我在这里读到这是不可能的,或者这篇文章是指跨数据库连接的其他方面。