通过视图插入到MSSQL表中

时间:2017-11-09 22:23:45

标签: sql sql-server

我有两张桌子:

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作为早餐烤面包机是一个完全白痴,我尝试以我的方式学习东西:)

1 个答案:

答案 0 :(得分:0)

您基本上有两种方法来更新视图中的数据。这些在documentation中非常清楚地解释了。

第一种是使用可更新的视图。这基本上是一个没有聚合的视图,所有更新只在一个表上(还有其他限制)。这可能足以满足您的目的。

如果视图更复杂,您可以在视图上使用INSTEAD OF触发器。这允许触发器根据视图定义根据需要修改基础表。