2012-04-20 5 views
4

저장 프로 시저를 사용하여 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` 
+0

당신이 뭘하고 있는지 모르지만 ADO 매개 변수에 정의 된 데이터 유형이 저장된 Proc 매개 변수와 다릅니다. 나는 그런 것들을 가지고 과거에 이슈를 가졌으므로, 당신이 이미 문제를 일으키지 않았다면 알고 있어야 할 것입니다. 이것은 도움이 될 수 있습니다 : http://www.w3schools.com/ado/ado_datatypes.asp – markblandford

+0

이봐, 맞아. 나는 그것들을 조화시킬 것이지만 어떻게 vba에서 SQL의 테이블 변수로 여러 값을 전달할 수 있을까요? 어디서부터 시작해야할지 모르겠습니다. – Daniel

답변

1

정상/고전 ADO에는 테이블 변수 데이터 유형이 없기 때문에 가능하지 않다고 생각합니다.

대안으로 XML 데이터 문자열을 작성한 다음 저장된 proc에서 구문 분석 할 수 있습니다.

관련 문제