4
我在Excel 2007中有一个用户表单,它使用存储过程将数据写入SQL Server 2008的表中。如何将VBA中的值传递给SQL Server 2008中的表变量?
插入的行然后获得我报告给VBA的标识。然后,我使用这个数字将多行数据填充到另一个表中。
但是,而不是存储过程先执行,然后写入另一个表中,我希望有存储过程执行这两件事情。
问题是,其他表的条目大于一行,并且从VBA发送到SQL的参数只能包含一个值。
所以,我相信我需要在SQL中创建一个表变量。但是,如何将VBA中的值传递给SQL中的表变量?请记住,一切都应该在一个存储过程中完成。这是我迄今为止所拥有的。
感谢您的帮助!
--SQL Stored Procedure
ALTER procedure [dbo].[Audit_InsertAuditFinding]
@AuditRID as int
,@EnteredBy as varchar(10)
,@AuditItemNumber as int
,@AuditFindingShort as varchar(50)
,@AuditFindingLong as varchar(500)
,@AuditDocsSaved as bit
,@AuditIncident as int output
as
BEGIN
SET NOCOUNT ON
Insert Into Audit_Findings
Values (@AuditRID,@EnteredBy,GETDATE(),@AuditItemNumber,@AuditFindingShort,@AuditFindingLong,@AuditDocsSaved)
declare @AuditFindingNumber as int
select @AuditFindingNumber = MAX(@@IDENTITY)
select @AuditIncident = @AuditFindingNumber
END
这是我的VBA代码到目前为止。
--VBA Code
cnn.CursorLocation = adUseClient
cmd.ActiveConnection = cnn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "InternalReporting.dbo.Audit_InsertAuditFinding"
cmd.NamedParameters = True
Set prm = cmd.CreateParameter("@AuditRID", adInteger, adParamInput, 50, Audit_Topic.Value * 1)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@EnteredBy", adVarWChar, adParamInput, 10, Environ("UserName"))
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@AuditItemNumber", adInteger, adParamInput, 10, Audit_ItemNumber.Value * 1)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@AuditFindingShort", adVarWChar, adParamInput, 50, Audit_ShortDescr.Value)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@AuditFindingLong", adVarWChar, adParamInput, 500, Audit_LongDescr.Value)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@AuditDocsSaved", adVarWChar, adParamInput, 500, Doc_Saved)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@AuditIncident", adVarWChar, adParamOutput, 10, Incident_Number.Value)
cmd.Parameters.Append prm
cmd.Execute
Incident_Number.Value = cmd.Parameters("@AuditIncident") * 1
SQL_String = "Delete from InternalReporting.dbo.Audit_Findings_Notifications where Audit_Incident = " & Incident_Number.Value * 1
rst.Open SQL_String, cnn, adOpenStatic
Set rst = Nothing
With AUD_02_Item_Mgmt.Notify_Overview
For I = 1 To .ListCount
SQL_String = "Insert Into InternalReporting.dbo.Audit_Findings_Notifications " & _
"Values (" & Incident_Number.Value & ",'" & .List(I - 1, 0) & _
"','" & .List(I - 1, 2) & "')"
rst.Open SQL_String, cnn, adOpenStatic
Set rst = Nothing
Next I
End With`
不知道你在做什么,但我注意到你的ADO参数中定义的数据类型与Stored Proc参数不同。我在过去遇到过这样的问题,所以要注意一些事情(如果它不是已经导致你的问题)。这可能有所帮助:http://www.w3schools.com/ado/ado_datatypes.asp – markblandford 2012-04-24 10:44:06
嘿,是的,那可能是。我会协调它们,但我怎样才能将vba中的多个值传递给SQL中的表变量。我不知道从哪里开始。 – Daniel 2012-04-27 00:41:29