2017-07-19 5 views
0

Ich hatte einige Zweifel an der dynamischen Einfügung von Daten während eine Insert-Anweisung, also wollte nur etwas Hilfe von euch bekommen. Ich muss mehrere Einfügeanweisungen machen, sagen etwa 1500 Datensätze auf der Grundlage von 2 verschiedenen Kriterien ist nur ein Beispiel für eine Insert-Anweisung. Jetzt während ich eine Insert-Anweisung mache, möchte ich die USERIDs und ROLEid die 2 Spalten, die Sie in der Abfrage sehen können, dynamisch zuweisen. Also zum Beispiel wo Benutzer-ID IN (500 verschiedene Benutzer-ID) und Rolle ID in (100 verschiedenen).Dynamisch In Tabelle einfügen, während überprüft wird, ob der Datensatz bereits existiert

Insert into userrolelist (Userid, Roleid, IsDefault, EffectiveStart, 
EffectiveEnd, Clientid, LastmodifiedUserId, LastmodifiedTimestamp) 
Values (161514,1011,1,'2016-01-21 00:00:00.001',Null,16785,0,'2016-01-21 
00:00:00.001') 

Ich bin sicher, es gibt einen Weg dynamisches Einfügen zu tun, basierend auf 2 verschiedene Kriterien die ich als nur verwirrt bin, wie kann ich das erreichen. Hauptsächlich auch, weil ich für jedes Kriterium vor dem Einfügen prüfen muss, ob die Kombination userid + roleid bereits in der Tabelle existiert. Weil, wenn ich es nicht überprüfe und immer noch eine Einfügung mache, wird es einen Fehler werfen, weil es eine Beschränkung gibt, die auf den 2 Feldern basiert.

Jede Hilfe zu diesem Thema wäre willkommen. Bitte lassen Sie mich wissen, wenn die Frage nicht sehr klar ist, und ich kann ein bisschen mehr Erklärung bei Bedarf hinzufügen. Vielen Dank.

+0

Sie können wahrscheinlich mehrere Einfügungen mit einer einzigen SELECT-Anweisung ausführen, die ebenfalls prüft, ob die Kombination aus Benutzer-ID/Role-ID, die Sie einfügen möchten, bereits in der Tabelle vorhanden ist. Aber es ist schwierig, spezifischer zu sein, ohne etwas wie Beispieldaten (mehr als die einzelne Zeile, die Sie zur Verfügung gestellt haben). – ZLK

+0

@ZLK - Ich kann versuchen, einen Screenshot der Beispieldaten für Sie zu erhalten. Können Sie mir eine Idee geben, wie Sie das bereits vorhandene in der Select-Anweisung mit mehreren Bedingungen überprüfen? wie eine userid + role id –

+1

Nun sagen wir, ich füge Sachen in eine Tabelle ein, die auf einer anderen Tabelle basiert. Ich könnte etwas tun wie 'INSERT INTO myTable (Spalte1, Spalte2 ...) SELECT Spalte1, Spalte2 ... FROM myOtherTable ASO WO NICHT EXISTIERT (SELECT 1 FROM myTable WHERE Spalte1 = O.column1 UND column2 = O.column2); 'oder so ähnlich. Ich kann der select-Anweisung bei Bedarf weitere where-Bedingungen hinzufügen und bei Bedarf auch das ändern, was ich mit case-Anweisungen einfüge. – ZLK

Antwort

1

Sie sagen nicht, woher Ihre Listen mit Benutzer-IDs und Rollen-IDs kommen, aber da Sie für jede eine andere Nummer angeben, gehe ich davon aus, dass es sich um separate Listen und nicht um eine einzelne Liste von Paaren handelt. Und ich nehme an, dass sie in den Tabellen userlist bzw. rolelist gespeichert sind. Dann können Sie den Einsatz wie folgt vorgehen:

insert into userrolelist 
    (Userid, Roleid, IsDefault, EffectiveStart, EffectiveEnd, 
    Clientid, LastmodifiedUserId, LastmodifiedTimestamp) 
select 
    userid, roleid, 
    1,'2016-01-21 00:00:00.001',Null,16785,0, 
    '2016-01-21 00:00:00.001' 
from 
    (select userid, roleid 
    from userlist 
     cross join rolelist 
    ) as userrole 
where 
    not exists (select 1 from userrolelist as ur where ur.userid=userrole.userid and ur.roleid=userrole.roleid); 

Die Unterabfrage erstellt eine Liste aller möglichen Paare von Benutzern und Rollen, so dass, wenn Sie bereits eine Liste von Paaren haben, können Sie einfach, dass anstelle der Unterabfrage .

+0

Ihre Lösung hat perfekt funktioniert. –

Verwandte Themen