Probleme wie dieses zeigen uns, dass die Leute, die SQL Server herstellen, ihr Produkt noch nie benutzt haben. Dies ist eine so krasse Lücke, dass man sich fragen muss, was sie einfach vergessen haben, um es richtig zu machen (ich habe eine Liste von ungefähr 30 anderen verrückten Problemen wie diesen, die ich überwinden musste, um diese Arbeit so zu machen, wie andere DBs es tun) der Box, einschließlich der Tatsache, dass wir einen miesen Assistenten benötigen, um dies zu tun [wenn ich die Zeit hatte, die ich darauf gewartet habe, dass dieser Assistent jedes Mal die gleichen Tabellen für dieselbe DB verbindet und auflistet, zurück ... Ich hätte Zeit für einen schönen Urlaub]).
Ich bin sehr faul und möchte nicht tippen EXEC sp_msforeachtable ...
zweimal jedes Mal, wenn ich das tue. Meine Aufgabe bestand darin, die Einschränkungen auf dem Produktionsserver zu belassen und sie vom Entwicklungsserver zu entfernen. Dies verhindert den Fehler, aber diese Methode hat einige SEHR GROSSE Nebenwirkungen. Erstens können Sie nicht mehr nur eine vollständige Sicherung auf Ihrem Entwicklungsserver wiederherstellen (es sei denn, Sie sind in der Lage, sie alle wieder zu entfernen). Zweitens funktioniert dies am besten, wenn Sie sicher sind, dass die Konsumenten Ihrer Daten diese Einschränkungen auch durchsetzen (oder sich nicht darum kümmern). In meinem Fall haben wir nur einen Verbraucher (unsere Website), daher haben wir diese Einschränkungen auch in den Site-Code integriert (dh bevor wir einen Benutzerdatensatz löschen, löschen wir zuerst alle Telefondatensätze für diesen Benutzer). Ja, Dies macht Einschränkungen in erster Linie überflüssig und verdoppelt die Arbeit, die ich zu erledigen habe, gibt mir aber auch die Möglichkeit zu überprüfen, ob mein Code mit oder ohne DBMS-basierte Einschränkungen funktioniert (Tatsache ist, dass sie sich noch auf dem Produkt befinden) Server nur als Notfallplan). Sie könnten dies als einen Fehler in meinem Design bezeichnen, aber ich würde es lieber als Problemumgehung für ein fehlerhaftes DBMS bezeichnen. In jedem Fall ist dies immer noch schneller und einfacher als in MSSQL, da es nicht in der Lage ist, mit seinem eigenen Design fertig zu werden.
sp_msforeachtable
(undsp_MSForEachDb
) ist undokumentiert und wird nicht unterstützt. Sie sollten es nicht / vermeiden. Es könnte die Tabellen überspringen !! Siehe diesen Beitrag von @AaronBertrand -> sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/… und dieses Verbindungselement - (MS zeigt an, dass es nicht behoben werden