Ich habe zwei Tabellen: TableA mit Spalten id(UNIQUEIDENTIFIER)
und name(NVARCHAR)
(verwendet NEWSEQUENTIALID()
um automatisch generieren Werte für 'id' Spalte)READUNCOMMITTED funktioniert nicht über Transaktionen
TableB mit Säulen id(IDENTITY)
, parentId(UNIQUEIDENTIFIER)
. parentId
in TabelleB hat eine Fremdschlüsseleinschränkung für TableA id
.
Ich versuche, die die folgenden Abfragen ausführen:
In Session 1:
BEGIN TRAN test1 INSERT INTO dbo.TableA(name) OUTPUT INSERTED.id VALUES ('foo')
Bitte beachte, dass ich nicht will, die Transaktion hier noch begehen.
In Session 2: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED BEGIN TRANSACTION test2 INSERT INTO dbo.TableB(parentId) VALUES('<use_id_from_session1_here>')
Der zweite Einsatz scheitert auch auszuführen und auflegt in SQL Server Management Studio und in meinem Anwendungscode. Sollte das Setzen einer Isolationsstufe von 'ReadUncommitted' nicht erlauben, dass die Einfügung in der zweiten Transaktion liest, was in der ersten nicht festgeschrieben wurde?
Fehle ich etwas hier oder die Art und Weise, wie ich die Transaktionsisolationsebene falsch verwende?
Irgendwelche Vorschläge würden geschätzt.
, die absolut Sinn machen nicht begrenzen! Gibt es das überhaupt, kann ich das umgehen, indem ich vielleicht die Fremdschlüssel-Beschränkung beibehalten kann? – user3638992
Was genau versuchst du zu tun? Und warum? Das wird mir helfen zu verstehen, was Sie möglicherweise tun können. –
Kein Weg, weil Sie die referentielle Integrität verletzen könnten, wenn es einen Weg gäbe. Ihr Design erscheint fehlerhaft @ user3638992. Übergreifender Zugriff auf die gleichen Daten ist sehr gefährlich und brüchig. – usr