我想从Access表中将变量/参数传递到SQL Server中的存储过程,使用ADODB连接。我拉动Access和Access访问查询中的变量(所以我试图传递每次执行代码时更新的变量)。尝试在Access VBA代码中传递下面的变量时出现以下错误消息:将参数从访问变量传递到SQL Server存储过程
参数对象定义不正确。提供了不一致或不完整的信息。
我是新来的这种编码。有人可以请提供一些指导如何将变量(Access查询的结果)传递给存储过程,然后在存储过程中调用这些变量?
访问VBA代码:
'''CREATE LINKED TABLE THAT PULLS FROM TBL_STATEMENT_MASTER IN SQL
''variables to pass to get dFileRE
'' (1) stateDate
stateDate = getItem("select distinct paydate from update_statement_master_re")
'' (2) stateNGN
stateNGN = getItem("select distinct deal_code from update_statement_master_re")
user = GetUser()
'' Connect to Data Source - Securities DB - SQL Server
Set dbconn = New ADODB.Connection
dbconn.ConnectionString = "driver=SQL Server;server=R7SQL1;database=SecuritiesDB;trusted_connection=YES"
dbconn.Open dbconn.ConnectionString
Set cmd = New ADODB.Command
cmd.ActiveConnection = dbconn
'' Set CommandText equal to the stored procedure name (spStatementCheck)
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "spStatementCheck"
cmd.NamedParameters = True 'paramStatementCheck'
'' THIS IS THE PART OF THE CODE THAT IS CRASHING – I AM NOT SURE HOW TO CALL THESE VARIABLES
cmd.Parameters.Append _
cmd.CreateParameter("@SPstateNGN", adVarChar, adParamInput, 0, "& stateNGN &")
cmd.Parameters.Append _
cmd.CreateParameter("@SPstateDate", adDate, adParamInput, 0, "& stateDate &")
SQL Server存储过程的代码:
USE [SecuritiesDB_TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spStatementCheck]
@SPstateNGN as nvarchar(25),
@SPstateDate as datetime
AS
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO UPDATE_Statement_Master_Check (NGN_Full, [Date], [DESCRIPTION], AMOUNT, NGN_SHORT, Series, FileDate, EffectiveDate, ActualDate, [Source], ID)
SELECT tbl_Statement_Master.NGN_Full, tbl_Statement_Master.[Date],
tbl_Statement_Master.[DESCRIPTION],
tbl_Statement_Master.AMOUNT,
tbl_Statement_Master.NGN_SHORT,
tbl_Statement_Master.Series,
tbl_Statement_Master.FileDate,
tbl_Statement_Master.EffectiveDate,
tbl_Statement_Master.ActualDate,
tbl_Statement_Master.[Source],
tbl_Statement_Master.ID
FROM tbl_Statement_Master
where tbl_Statement_Master.[Date] <> @SPstateDate
and tbl_Statement_Master.NGN_Full = @SPstateNGN
and tbl_statement_master.FileDate = (Select distinct max(filedate) from tbl_statement_master
where [DATE] = @SPstateDate and NGN_Full = @SPstateNGN);
我可能会在这里丢失一些东西,但是'GetItem'行会返回多个值,并且您试图将这些多个值传递给'CreateParameter'调用。难道你不希望在那里有一个循环来遍历每条记录,并根据该记录中的参数值执行存储过程。 我不明白创建参数的''&&stateNGN&''部分。在过去,我只是将变量放在该参数中,而没有引号或符号。 –
** GetItem **将只返回一个值。我使用了** stateNGN **和** stateDate **,因为每次代码执行时都需要更新这些变量,而不是对变量进行硬编码。 – user2989011
“GetItem”指向的第二点是关于CreateParameter(“@ SPstateNGN”,adVarChar,adParamInput,0,stateNGN)',只是删除引号和&符号,因为变量中保存的任何值都作为参数值。 –