저장 프로 시저를 사용하여 SQL Server 2008의 테이블에 데이터를 쓰는 Excel 2007 사용자 폼이 있습니다.SQL Server 2008의 VBA에서 테이블 변수로 값을 전달하는 방법은 무엇입니까?
삽입 된 행은 내가 VBA에 다시보고하는 ID를 가져옵니다. 그런 다음이 숫자를 사용하여 여러 행의 데이터를 다른 테이블에 채 웁니다.
그러나 저장 프로 시저를 먼저 실행 한 다음 다른 테이블에 쓰는 대신 저장 프로 시저에서 두 가지 작업을 수행하려고합니다.
문제는 다른 테이블에 대한 항목이 하나의 행보다 크고 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 매개 변수에 정의 된 데이터 유형이 저장된 Proc 매개 변수와 다릅니다. 나는 그런 것들을 가지고 과거에 이슈를 가졌으므로, 당신이 이미 문제를 일으키지 않았다면 알고 있어야 할 것입니다. 이것은 도움이 될 수 있습니다 : http://www.w3schools.com/ado/ado_datatypes.asp – markblandford
이봐, 맞아. 나는 그것들을 조화시킬 것이지만 어떻게 vba에서 SQL의 테이블 변수로 여러 값을 전달할 수 있을까요? 어디서부터 시작해야할지 모르겠습니다. – Daniel