2017-05-18 4 views
0

Ich habe eine SQL-Abfrage geschrieben, um den Datensatz einzufügen, wenn er nicht existiert & gibt seine Bereichsidentität zurück.Wenn Wert in Tabelle vorhanden ist, fügen Sie ID ein und geben Sie sie zurück, andernfalls geben Sie die ID des Bereichs ein und geben sie zurück

IF NOT EXISTS(SELECT email from tableUser 
where email='[email protected]') 
INSERT INTO tableUser (name, countryCode, mobile, email, ip) 
VALUES ('name', 91, 9811223344, '[email protected]', 1) SELECT SCOPE_IDENTITY() 

aber wenn Datensatz existiert, dann wollte ich seine ID zurückgeben.

Hinweis: ID ist Identität Spalte in der Tabelle

Antwort

0

Sie eine MERGE mit einer OUTPUT Klausel verwenden können. Etwas wie:

MERGE INTO tableUser t 
USING (VALUES('name',91,'9811223344','[email protected]',1)) s(name, countryCode, mobile, email, ip) 
ON t.email = s.email 
WHEN NOT MATCHED THEN INSERT (name, countryCode, mobile, email, ip) 
        values(s.name,s.countryCode,s.mobile,s.email,s.ip) 
WHEN MATCHED THEN UPDATE set ip = t.ip /* No change */ 
OUTPUT inserted.ID; 

(Beachten Sie, dass ich auch mobil geändert haben textliche zu sein - trotz mobilen Stellenzahlen werden zusammengesetzt, tun wir nicht Mathe mit ihnen, und oft, zB führende Nullen kann wichtig sein, so es ist normalerweise besser, sie nicht als tatsächliche Zahlen zu speichern)

+0

Danke, es hat funktioniert !!!!!!! – ace

1

Versuchen Sie es unter query:

IF NOT EXISTS(SELECT email from tableUser where email='[email protected]') 
    BEGIN 
     INSERT INTO tableUser (name, countryCode, mobile, email, ip) 
     VALUES ('name', 91, 9811223344, '[email protected]', 1) 

     SELECT SCOPE_IDENTITY() 
    END 
    ELSE 
    BEGIN 

     SELECT Id FROM tableUser where email='[email protected]' 

    END 
+0

Danke, aber was Sie vorgeschlagen haben, ist eine gespeicherte Prozedur. Ist es möglich, es nur mit einfacher Abfrage durchzuführen? – ace

Verwandte Themen