2017-03-31 6 views
0

Niemand sollte erlaubt sein, die Kundenadresse Spalte zu aktualisieren, es sei denn, die Postleitzahl Spalte wird ebenfalls aktualisiert. Wenn versucht wird, eines ohne das andere zu aktualisieren, wird ein Trigger ausgelöst und dem Benutzer wird eine Fehlermeldung angezeigt.Verhindern Spaltenwechsel ohne die anderen

Jede Hilfe, wie ich dies in Microsoft SQL Server 2012 tun kann, wird geschätzt!

+0

Klingt nach etwas, das auf Anwendungsebene und nicht auf Datenbankebene behandelt werden sollte. –

Antwort

1

Sie können unter Logik verwenden

CREATE TRIGGER [dbo].AU_MyTrigger ON [dbo].MyTable 
FOR UPDATE 
AS 
BEGIN 
    declare @bu_addr varchar(100) 
    declare @bu_zip varchar(100) 
    declare @au_addr varchar(100) 
    declare @au_zip varchar(100) 

    select @bu_addr = addr, @bu_zip = zip from DELETED 
    select @au_addr = addr, @ay_zip = zip from INSERTED 
    if (@bu_addr <> @au_addr) and (@bu_zip = @au_zip) 
    BEGIN 
     -- update table with old values 
     -- raise error 
    END 
END 

Beachten Sie, dass, wenn dieses Update in Batch passieren können, müssen Sie durch jeden Datensatz Schleife und aktualisieren ihren Wert zu alt und erst am Ende des Abzugs Rück Fehler (außerhalb der Schleife). In diesem Fall müssen Sie CURSOR

verwenden, um auf aktualisierten Zeilen zu iterieren. Sie könnten nicht so einfach wie ich erklärte, aber das ist der Ansatz, der funktioniert.

Verwandte Themen