我有两张桌子:
users table
+----+----------+-------+-----+
| id | username | email | ... |
+----+----------+-------+-----+
APIkeys table
+----+--------+-----+---------+------+
| id | userId | key | expires | used |
+----+--------+-----+---------+------+
和观点:
ValidAPIkeys
+----------------+-------------+-----------------+
| users.username | APIkeys.key | apikeys.expires |
+----------------+-------------+-----------------+
视图仅显示used
为0且expires
比现在更多的值。这很好用,甚至UPDATE
都可以。我现在需要的是能够在APIkeys
表到视图中插入值(最后),例如INSERT INTO [dbo].[ValidAPIkeys] (username, key) VALUES ('myUserName', 'someCryptographicNonsense')
。我想要做的是从myUserName
获取users
的ID,然后执行INSERT INTO [dbo].[APIkeys] (userId, key) VALUES ('whateverHeGetsFromMaybeASelectStatement-id', 'someCryptographicNonsense')
。
我想知道这是否可能。我记得在Access中做过类似的事情,但无法弄清楚它是如何工作的。如果这不可能,我总是可以使用id定义变量,然后使用它。我觉得这样的观点会更漂亮。
感谢您的任何反馈。如果您有这种感觉,请告诉我,使用MSSQL作为早餐烤面包机是一个完全白痴,我尝试以我的方式学习东西:)
答案 0 :(得分:0)
您基本上有两种方法来更新视图中的数据。这些在documentation中非常清楚地解释了。
第一种是使用可更新的视图。这基本上是一个没有聚合的视图,所有更新只在一个表上(还有其他限制)。这可能足以满足您的目的。
如果视图更复杂,您可以在视图上使用INSTEAD OF
触发器。这允许触发器根据视图定义根据需要修改基础表。