sql >> データベース >  >> RDS >> Sqlserver

タグテーブルがあります。 LINQ を使用して一括挿入する方法は?

    LINQ はクエリです テクノロジーですが、あなたの言いたいことはわかっていると思います。これが LINQ-to-SQL であるか Entity Framework であるかをもう少し具体的にしたい場合があります。また、あなたのケースで「バルク」が何を意味するのかを明確にすることもできます... 10 ~ 100 レコードの場合、10,000 レコードに対して別の回答を使用する可能性があります (SqlBulkCopy ステージング テーブルにインポートし、ストアド プロシージャをデータベースにインポートするのが最善の方法です)。

    比較的低い数値の場合 - ORM ツールを使用してレコードを検索します。たとえば、LINQ-to-SQL (おそらくスパニング シリアライズ可能なトランザクション) を使用し、説明のために C# を使用します (ループとキャッシュを表示するように更新 ):

    Dictionary<string,Tag> knownTags = new Dictionary<string,Tag>();
    foreach(... your data ...) {
        Tag tag;
        if(!knownTags.TryGetValue(tagName, out tag)) {
            tag = ctx.Tags.SingleOrDefault(t => t.Name == tagName);
            if(tag == null) {
                tag = new Tag { Name = tagName };
                ctx.Tags.InsertOnSubmit(tag);
            }
            knownTags.Add(tagName, tag);
        }
        // insert video tag
    }
    ctx.SubmitChanges();
    

    実際、パフォーマンス上の理由から、これは自然キーが意味をなす場合の 1 つではないかと思います。つまり、 Tag を使用します。 (varchar ) を主キーとして、それを (外部キーとして) VideoTags に複製します。 - Tags に参加する必要はありません

    数値が大きい場合は、 SqlBulkCopy を使用するのが非常に簡単です;データを DataTable に入れるだけです プッシュしてから、TSQL で作業を行います。




    1. PostgreSQL:6つのそれほど簡単ではない部分

    2. Async/await関数とnpm-mysqlを使用して結果の代わりにクエリオブジェクトを取得する

    3. Google BigQueryで数千のカテゴリのダミー変数列を作成するにはどうすればよいですか?

    4. 主キーDjangoMySQLを更新します