2017-11-09 2 views
1

Ich habe zwei Tabellen:INSERT INTO einer MSSQL-Tabelle über einen Blick

users table 
+----+----------+-------+-----+ 
| id | username | email | ... | 
+----+----------+-------+-----+ 

APIkeys table 
+----+--------+-----+---------+------+ 
| id | userId | key | expires | used | 
+----+--------+-----+---------+------+ 

und eine Ansicht:

ValidAPIkeys 
+----------------+-------------+-----------------+ 
| users.username | APIkeys.key | apikeys.expires | 
+----------------+-------------+-----------------+ 

Die Ansicht zeigt nur die Werte, deren used 0 und expires ist mehr als jetzt . Das funktioniert gut und sogar UPDATE funktioniert gut. Was ich jetzt brauche, ist in der Lage, Werte in (APIkeys) Tabelle durch die Ansicht, so etwas wie INSERT INTO [dbo].[ValidAPIkeys] (username, key) VALUES ('myUserName', 'someCryptographicNonsense') (am Ende) einfügen. Ich möchte, dass die ID myUserName von users abgerufen wird und dann eine INSERT INTO [dbo].[APIkeys] (userId, key) VALUES ('whateverHeGetsFromMaybeASelectStatement-id', 'someCryptographicNonsense').

Ich fragte mich, ob das überhaupt möglich war. Ich erinnere mich, dass ich in Access so etwas gemacht habe, kann aber nicht herausfinden, wie es funktioniert. Wenn das nicht möglich ist, kann ich immer eine Variable mit der ID definieren und diese dann verwenden. Ich habe einfach das Gefühl, dass eine Aussicht wie diese ein bisschen schöner wäre.

Vielen Dank für jedes Feedback. Wenn Sie sich so fühlen, sagen Sie mir, ich bin ein kompletter Idiot für die Verwendung von MSSQL als Toaster zum Frühstück, ich versuche, Sachen auf meine Art zu lernen :)

+0

Sie können keine Ansicht einfügen, wenn die Ansicht mehr als eine Basistabelle enthält. Woher weiß es, wo die Informationen für jeden Tisch gespeichert werden? –

+0

Access ist dazu in der Lage, und es wird von ADO-Engine behandelt. Die Geschichte ist in SQL Server – FLICKER

+0

@SeanLange anders, das ist teilweise was ich fragen. Wenn es eine Möglichkeit gibt, es zu spezifizieren –

Antwort

0

Sie haben grundsätzlich zwei Ansätze zum Aktualisieren von Daten in einer Ansicht. Diese sind ziemlich klar in der documentation erklärt.

Die erste besteht darin, eine aktualisierbare Ansicht zu verwenden. Dies ist im Grunde eine Ansicht, die keine Aggregationen hat und alle Aktualisierungen sind nur auf einer einzigen Tabelle (es gibt andere Einschränkungen). Dies kann für Ihre Zwecke ausreichend sein. Wenn die Ansicht komplizierter ist, können Sie INSTEAD OF Trigger für die Ansicht verwenden. Dadurch kann der Trigger die zugrunde liegenden Tabellen je nach Bedarf basierend auf der Ansichtsdefinition ändern.

+0

Ich benutzte die INSTEAD OF, die gut funktioniert. Danke für die Hilfe. –