Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Имам таблица с етикети. Как да вмъкнете групово с помощта на LINQ?

LINQ е заявка технология, но мисля, че знаем какво имате предвид; може да искате да сте малко по-конкретни дали това е LINQ-to-SQL или Entity Framework. Може също да искате да изясните какво означава „групово“ във вашия случай... за 10-100 записа може да използвате различен отговор за 10 000 записа (където SqlBulkCopy в етапна таблица и съхранена процедура за импортиране в db би била най-добрата идея).

За сравнително малък брой - просто използвайте вашия ORM инструмент, за да намерите записите - например с LINQ-към-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();

Всъщност, от съображения за производителност се чудя дали това може да е един от случаите, когато естественият ключ има смисъл - т.е. използвайте Tag (varchar ) като първичен ключ и го дублирайте (като външен ключ) в VideoTags - тогава не е необходимо да се присъединявате към Tags маса през цялото време.

Ако числата са по-големи, е доста лесно да се използва SqlBulkCopy; просто поставете данните в DataTable и го натиснете, след което свършете работата в TSQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте COLUMNPROPERTY() за връщане на информация за колона или параметър в SQL Server

  2. SQL Server 2005 - Намерете кои съхранени процедури се изпълняват към определена таблица

  3. Стойност на SQL Server 2008 GEOGRAPHY STDistance().

  4. Как да групирате по месеци с помощта на SQL Server?

  5. VS 2010 проект за изграждане на база данни получава SQL04151