使用VBA从Excel调用的存储过程中的SELECT和UPDATE

时间:2015-07-16 13:06:59

标签: excel tsql excel-vba vba

我创建了一个存储过程,它涉及一个简单的UPDATE,然后是SELECT语句,它在SSMS中工作正常 - 更新正常,select会生成一个记录集。

问题出在我正在尝试的时候:

Set rs = New ADODB.Recordset             'works fine
conn.Open sConnString                    'works fine
Set rs = conn.Execute("EXEC uspUpdateManual")

当对象关闭时,我不允许进行'操作3704'错误。如果我注释掉存储过程的更新部分,则select会自行正常工作,并且记录集将被放入Excel中。

SP:

ALTER PROCEDURE [dbo].[uspUpdateManual] 
AS
BEGIN TRANSACTION
    UPDATE Table1
    SET ACC = '9'
COMMIT TRANSACTION
BEGIN TRANSACTION
    SELECT * FROM Table1
COMMIT TRANSACTION
END
GO

有没有办法同时更新和选择一个,或者我必须将它们分成两个存储过程吗?

1 个答案:

答案 0 :(得分:1)

我认为问题可能在于交易,你能否显示程序代码?您可以尝试将更新包装在事务中,将选择包装在另一个事务中,如下所示:

BEGIN TRANSACTION

UPDATE...

COMMIT TRANSACTION

BEGIN TRANSACTION

SELECT...

COMMIT TRANSACTION