我创建了一个存储过程,它涉及一个简单的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
有没有办法同时更新和选择一个,或者我必须将它们分成两个存储过程吗?
答案 0 :(得分:1)
我认为问题可能在于交易,你能否显示程序代码?您可以尝试将更新包装在事务中,将选择包装在另一个事务中,如下所示:
BEGIN TRANSACTION
UPDATE...
COMMIT TRANSACTION
BEGIN TRANSACTION
SELECT...
COMMIT TRANSACTION