1つのトランザクション内に挿入する必要がある行のバッチがあります。最初の行はヘッダーで、後続の行はすべて最初の行を参照する必要があります。最初の行がFKでトランザクション内に挿入されます
これは私が最初の行を挿入しようとしてる方法です:
using (var connection = new SqlConnection(_connectionString))
{
connection.Open();
var transaction = connection.BeginTransaction();
try
{
// create the record header
using (var createRecordCommand = connection.CreateCommand())
{
createRecordCommand.CommandText =
"DECLARE @RecordId INT;" +
$"INSERT INTO ..." +
"SET @RecordId = scope_identity();";
createRecordCommand.Transaction = transaction;
createRecordCommand.ExecuteNonQuery();
私は、その後の文でレコードIDを参照するために苦労しています、変数@RecordIdは、以下のスニペットの中で宣言されていないと考えているようです。 'スカラー変数 "@RecordId"を宣言する必要があります。'
using (var createAttributeCommand = connection.CreateCommand())
{
createAttributeCommand.Transaction = transaction;
createAttributeCommand.CommandText =
$"INSERT INTO ... (RecordId,...) VALUES (@RecordId,...)";
またパラメータは難しい証明される@RecordId変数を抽出し、私はDECLARE @RecordId INT;
createRecordCommand.Parameters.Add(new SqlParameter("@RecordId", SqlDbType.Int) { Direction = ParameterDirection.Output });
なぜあなたはあなたのロジックは、ストアドプロシージャの中に入れていないし、そしてちょうどC#のからプロシージャを呼び出しますか? –
私は問題の複雑さを無くしました。私たちが達成しようとしていることは、残念なことにストアドプロシージャにとっては複雑すぎます。 –
何か?ストアドプロシージャにはあまりにも複雑ですか?挿入をストアド・プロシージャとして実行し、OUTPUTパラメータを使用してIDを戻します。 –