4

ストアドプロシージャを使用してSQLServer2008のテーブルにデータを書き込むExcel2007のユーザーフォームがあります。

挿入された行は、VBAに報告するIDを取得します。次に、この番号を使用して、データのいくつかの行を別のテーブルに入力します。

ただし、最初にストアドプロシージャを実行してから別のテーブルに書き込むのではなく、ストアドプロシージャに両方のことを実行させたいと考えています。

問題は、他のテーブルのエントリが1行より大きく、VBAからSQLに送信するパラメータに含めることができる値が1つしかないことです。

したがって、SQLでテーブル変数を作成する必要があると思います。ただし、VBAからSQLのテーブル変数に値を渡すにはどうすればよいですか?すべてを1つのストアドプロシージャで実行する必要があることを忘れないでください。これは私がこれまでに持っているものです。

ご協力いただきありがとうございます!!!

--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`
4

1 に答える 1

1

テーブル変数データ型がないため、通常/従来のADOではこれが不可能だと思います。

別の方法として、XMLデータ文字列を作成し、ストアドプロシージャで解析することもできます。

于 2012-04-27T07:45:09.927 に答える