Ich bin auf ein Problem mit einer Anwendung, die mich zu einer Methode führt das folgende führt.Optimieren Sie die SQL-Funktion in C# -Code
protected override int GetCount(List<int> itemlist)
{
sql.Execute(@"TRUNCATE Table table0");
int count = 0;
foreach (int itemgroup in itemlist)
{
count += sql.Execute(@" INSERT INTO table0 (ID, Guid)
SELECT table1.ID , table1.Guid
FROM dbo.tablefunction(@p0) table1 LEFT JOIN
dbo.table0 ON table1.ID = table0.ID
WHERE table0.ID IS NULL", itemgroup);
}
return count;
}
Ich renne in eine Schlüsseleinschränkung Problem während der Einfügeschleife, die nicht völlig unerwartet ist.
Aber ich merke auch, dass es mehrere Inserts unterschiedlicher Größe potenziell tun, so dass ich nach Ideen/Vorschläge für die dynamische Assembly eine Union-Abfrage und dann alle Ergebnisse auf einmal einfügen. Zum Beispiel könnte die resultierende Abfrage
WITH b AS
(
SELECT table1.ID , table1.Guid
FROM dbo.tablefunction(item0) table1 LEFT JOIN
dbo.table0 ON table1.ID = table0.ID
WHERE table0.ID IS NULL
UNION
SELECT table1.ID , table1.Guid
FROM dbo.tablefunction(item1) table1 LEFT JOIN
dbo.table0 ON table1.ID = table0.ID
WHERE table0.ID IS NULL
)
INSERT INTO table0 (ID, Guid)
SELECT * FROM b
Ich bin nur nicht sicher, wie es am besten geht.
Es hängt nicht wirklich mit Ihrer dynamisch großen Einfügung zusammen, aber kann dieser Code von mehr als einem Ort gleichzeitig aufgerufen werden? Wenn ja, was passiert, wenn die Tabelle nach dem Einfügen der Werte TRUNCATEd von einer anderen Instanz erhält, so dass Sie nicht mehr die Werte haben, die Sie haben sollten, sondern stattdessen eine leere Tabelle? – seventyeightist
Es gibt eine Sperre, die verhindert, dass dies gleichzeitig ausgeführt wird. aber die Tabelle, die es einfügt, wird von der nächsten Reihe von Methoden in der Sequenz verwendet und dann abgespült und wiederholt, daher die Kürzung. Es gibt wahrscheinlich bessere Möglichkeiten, um das Ganze zu machen, aber ich hoffe, diese Änderung isoliert auf diese Methode zu halten, um größere Regressionen zu vermeiden. –
Also, was ist das Problem genau beim Komponieren dieser Gewerkschaftserklärung? Scheint wie eine Reihe von String-Verkettungen. – Evk