1

VB.NETANDを使用していますSQL SERVER 2008

これINSERTに必要なオブジェクトの配列はオブジェクトですSQL SERVER 2008ここに画像の説明を入力

このオブジェクトはInserted3 つのテーブルになります。

  • 最初のテーブルにはレポート情報が含まれます: [id ,reportName , description , style ] この情報を挿入した後、2 番目のテーブルとして@@IDENTITYこれを使用しますRowFK

  • 2 番目のテーブル: [id , id_first_table, コメント,完了,終了,名前,開始,結果]

質問Elementは 3 番目のテーブルに付属しています。チェックリストをループして、要素の最後まで 2 番目のテーブル ID を使用して 3 番目のテーブルに挿入するにはどうすればよいですか?

お気に入り :

 [id , id_second_table, 101 ,820] 
 [id , id_second_table'sameid', 101,831]

これが私が試したことです:

 DECLARE @reportId INT , @fieldId INT  

 INSERT INTO    
 dbo.tblReport(strReportName,strReportDescription,strReportStyle,
 strScource,dtmCreated)
 VALUES ('caustic' , 'titration caustic', 'simple table' ,'user' ,  getdate()) 
 SELECT @reportId = @@IDENTITY

 INSERT INTO dbo.tblReportFields   
 (lngReports,strFieldName,bolComment,bolComplete,bolFinished,
 bolOutCome,bolStarted,bolUser)
 VALUES (@reportId ,'caustic titration' , 1,0,1,0,0,0)
 SELECT @fieldId = @@IDENTITY 

 --LOOP AND INSERT ALL THE checklist Element 

  INSERT INTO dbo.tblReportTask (lngReportFields,lngChecklist,lngTask)
  VALUES (@fieldId, 814 , 1443)

これを行う最善の方法に関するアイデアも考慮されます

4

1 に答える 1

1

オブジェクトと SQL ステートメントが完全に一致していないため、情報を処理するのが少し難しくなりました。ただし、基本的な方法は次のとおりです。それをあなたの問題に関連付けることができれば幸いです。

これは、Report および ReportFields テーブルを挿入する方法です。ReportFields テーブルの SQL は Report テーブルと似ているため、含めませんでした。

  Dim reportID As Integer = 0
  Dim fieldID As Integer = 0
  Using tmpCONN As New SqlConnection(tmpConnStr)
    Dim tmpSQL As New StringBuilder
    tmpSQL.AppendLine("INSERT INTO dbo.tblReport(strReportName,strReportDescription,strReportStyle,strScource,dtmCreated) ")
    tmpSQL.AppendLine(" VALUES ")
    tmpSQL.AppendLine("(@NAME, @DESC, @STYLE, @SOURCE,@CREATED); ")
    tmpSQL.AppendLine("SELECT SCOPE_IDENTITY() AS ScopeID; ")
    Using tmpCMD As New SqlCommand(tmpSQL.ToString, tmpCONN)
      tmpCMD.Parameters.AddWithValue("@NAME", Obj.Name)
      tmpCMD.Parameters.AddWithValue("@DESC", Obj.Description)
      tmpCMD.Parameters.AddWithValue("@STYLE", Obj.Stype)
      tmpCMD.Parameters.AddWithValue("@SOURCE", Obj.Source)
      tmpCMD.Parameters.AddWithValue("@CREATED", Date.Now)
      reportID = tmpCMD.ExecuteScalar
    End Using

    'Do same type of insert here for the ReportFields table.  Instead of reportID,'
    'it would return fieldID.'


    'This is the loop to insert to Tasks'
    For Each chk As chkObj In Obj.Checklist
      tmpSQL = New StringBuilder
      tmpSQL.AppendLine("INSERT INTO dbo.tblReportTask (lngReportFields,lngChecklist,lngTask) ")
      tmpSQL.AppendLine(" VALUES ")
      tmpSQL.AppendLine("(@FIELD_ID, @CHECK_ID , @TASK) ")
      Using tmpCMD As New SqlCommand(tmpSQL.ToString, tmpCONN)
        tmpCMD.Parameters.AddWithValue("@FIELD_ID", fieldID)
        tmpCMD.Parameters.AddWithValue("@FIELD_ID", chk.cl_id)
        tmpCMD.Parameters.AddWithValue("@FIELD_ID", chk.ts_id)
        tmpCMD.ExecuteNonQuery()
      End Using
    Next
  End Using
于 2012-08-17T15:06:28.883 に答える