Dies ist meist eine Frage Neugier. Ich habe gerade erlebt eine Situation, wo auf einer Testdatenbank ich die folgende Abfrage hatte:Microsoft SQL Server - Unterabfragen einschränken
update table
set column1 = 1
where column2 in (1,2)
Aber dies hielt mit dem Fehler ausführt, dass Subquery mehr als einen Wert zurückgegeben.
Jetzt habe ich überprüft, um sicherzustellen, dass ich nicht mehrere Identitätsschlüssel hatte oder dass die 'in' Werte eindeutig waren. Also sollte dies in keiner Weise geschehen sein.
Beim Überprüfen der LIVE-Kopie der Datenbank hatte dieselbe Abfrage kein Problem. Meine Frage lautet also:
Was können Sie mit den Microsoft SQL Server-Einstellungen oder der Datenbankstruktur tun, die ein solches Szenario erstellen würde?
Hat Ihre Tabelle einen Update-Trigger? Ich vermute, dass es so ist, und es nimmt an, dass "eingefügt" oder "gelöscht" nur eine Zeile enthält. –
Also ... die einzige Möglichkeit, die PK-Verletzung zu verursachen, ist, wenn die Spalte1 ein Teil der zusammengesetzten PK oder PK selbst ist. Die Abfrage scheint geradlinig zu sein: Aktualisieren Sie Spalte1 und setzen Sie sie auf (1), wenn Sie Wert (1) oder (2) in der Spalte2 innerhalb desselben Tupels finden. Ich schätze deine Test DB hat andere Startaufzeichnungen als deine Produktion. Können Sie die Produktionswerte in Ihre Test-DB kopieren und erneut ausführen? – Milan
@Milan Wie hast du von "Unterabfrage mehr als einen Wert zurückgegeben" zu "PK-Verletzung"? – HABO