2009-10-22 10 views
17

Ich versuche, die Id einer Reihe zurückzukehren IErste die Id einer Zeile I in SQL Server aktualisiert

UPDATE ITS2_UserNames 
    SET AupIp = @AupIp 
    WHERE @Customer_ID = TCID AND @Handle_ID = ID 

    SELECT @@ERROR AS Error, @@ROWCOUNT AS RowsAffected, SCOPE_IDENTITY() AS ID 

in SQL aktualisieren, und ich erhalte für die ID Null, wie kann ich diese ?

Antwort

40

Die @@identity und scope_identy() übergeben Ihnen die Identität einer neuen Reihe, dh. nach einem Einfügen. Nach der Aktualisierung lautet die Identität der Zeile ... @Customer_ID oder @Handle_Id? Wenn ein anderes Feld, shoudl Sie die OUTPUT-Klausel verwenden, um die ID der aktualisierten Zeile zurück:

UPDATE ITS2_UserNames 
SET AupIp = @AupIp 
OUTPUT INSERTED.PrimaryKeyID 
WHERE @Customer_ID = TCID AND @Handle_ID = ID 
+2

Unter der Annahme, er ist auf SQL2005/2008, natürlich – MartW

+0

Nein, es ist in SQL 2000 sowie – MartW

+0

@CodeByMoonlight: Du hast Recht –

0

Wenn Sie die Datensätze herausfinden möchten, dass das Update übereinstimmen sollten Sie eine Auswahl mit ihm tun

Select IdColumn 
From ITS2_UserNames 
WHERE @Customer_ID = TCID AND @Handle_ID = ID 
+0

Dies funktioniert nicht, wenn Sie eine Spalte aktualisieren und auch auf 'on' klicken – Talon

1

Identifizieren Sie den IDENTITY-Wert der Zeile nicht bereits mit @Handle_ID? Wenn ja, dann verwenden Sie einfach:

SELECT @@ERROR AS Error, @@ROWCOUNT AS RowsAffected, @Handle_ID AS ID; 

Wenn nicht, dann können Sie erklären, welche Spalte die Spalte IDENTITY ist?

Verwandte Themen