Как получить выходное значение из хранимой процедуры через сквозной запрос DAO
Я конвертирую ADP в ACCDB (таблицы / представления, связанные с SQL Server), и мне очень повезло с пропущенными запросами DAO. Одна область, где я застреваю, заключается в извлечении параметра OUTPUT из хранимой процедуры.
SP имеет следующие параметры:
(@IType int, @RetVal bit OUTPUT)
и, говоря просто, следующая логика обработки
- Возвращать идентификатор после вставки C # с помощью SQL Server
- C # и SQL Server: получить результат из хранимой процедуры
- Как проверить, завершила ли хранимая процедура все операции вставки / удаления / обновления?
- Как получить возвращаемое значение из моей хранимой процедуры?
- Как правильно убрать возвращаемое значение из вызова в хранимую процедуру
IF @IType = 1 SET @RetVal = (SELECT ... . . .
Никакие записи не возвращаются. Все, что требуется процедуре доступа VBA, это RetVal.
Я искал в Интернете, и решения, как правило, направлены на запись значения в таблицу или использование ADODB.
Я действительно хочу избежать изменения хранимой процедуры, так как изменение должно быть распространено на несколько баз данных.
Кроме того, было бы неплохо придерживаться пропусков DAO, поскольку я уже начал этот путь.
Есть ли способ достичь этого?
- Сохраненная процедура Возвращаемое значение для сбоя SQL-заданий
- Вызов хранимой процедуры с возвращаемым значением
- Возвращаемое значение из команды SQL Server Insert с использованием c #
- Когда SqlCommand закрывается при использовании в другой функции?
- Получить возвращаемое значение (скалярное), а не таблицу результатов, из хранимой процедуры с использованием Java и Hibernate
- Получение возвращаемого значения из JDBC MSSQL
Да, вы можете создать сквозной запрос, который использует анонимный блок кода для извлечения параметра OUTPUT. Для хранимой процедуры
CREATE PROCEDURE [dbo].[IsOne] @IType INT = 0, @RetVal BIT OUTPUT AS BEGIN SET NOCOUNT ON; IF @IType = 1 SET @RetVal = 1; ELSE SET @RetVal = 0; END
вы можете использовать код VBA следующим образом:
Option Compare Database Option Explicit Sub ptqTest() Dim cdb As DAO.Database Set cdb = CurrentDb Dim ptq As DAO.QueryDef Set ptq = cdb.CreateQueryDef("") ' temporary pass-through query ptq.Connect = "ODBC;DSN=SQLmyDb" ptq.ReturnsRecords = True ptq.SQL = _ "DECLARE @rv BIT;" & _ "EXEC dbo.IsOne @IType = 3, @RetVal = @rv OUTPUT;" & _ "SELECT @rv;" Dim rs As DAO.Recordset Set rs = ptq.OpenRecordset ' BIT value 0 will map to False in this case Debug.Print "stored procedure returned " & rs(0) rs.Close Set rs = Nothing Set ptq = Nothing Set cdb = Nothing End Sub