通过视图插入到MSSQL表中

通过视图插入到MSSQL表中,sql,sql-server,Sql,Sql Server,我有两张桌子: users table +----+----------+-------+-----+ | id | username | email | ... | +----+----------+-------+-----+ APIkeys table +----+--------+-----+---------+------+ | id | userId | key | expires | used | +----+--------+-----+---------+------+ 还

我有两张桌子:

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

APIkeys table
+----+--------+-----+---------+------+
| id | userId | key | expires | used |
+----+--------+-----+---------+------+
还有一个观点:

ValidAPIkeys
+----------------+-------------+-----------------+
| users.username | APIkeys.key | apikeys.expires |
+----------------+-------------+-----------------+
该视图仅显示那些
已使用
为0且
过期
超过现在的值。这非常有效,甚至
UPDATE
也可以正常工作。我现在需要的是能够通过视图向
apikees
插入值,类似于
insert-INTO[dbo].[ValidAPIkeys](用户名,键)值('myUserName','somecryptographics')
。我想做的是从
users
获取
myUserName
的id,然后在[dbo].[APIkeys](userId,key)值('whateverHeGetsFromMaybeASelectStatement-id','somecryptographics胡言乱语')中插入

我想知道这是否有可能。我记得在Access中做过类似的事情,但不知道它是如何工作的。如果这是不可能的,我可以定义一个id为的变量,然后使用它。我只是觉得这样的景色会更美一些


谢谢你的反馈。如果你觉得这样的话,就告诉我我是个十足的傻瓜,因为我用MSSQL作为早餐的烤面包机,我试着用我自己的方式来学习:)

在视图中更新数据基本上有两种方法。这些问题在报告中解释得相当清楚

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


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

更新视图中的数据基本上有两种方法。这些问题在报告中解释得相当清楚

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


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

如果视图包含多个基表,则无法插入到视图中。它如何知道将每个表的信息放在哪里?Access能够做到这一点,并且由ADO引擎处理。SQL中的情况不同Server@SeanLange这部分是我要问的。如果有办法指定ITI,如果视图有多个表,则需要向视图添加触发器,以便添加逻辑以将记录放在正确的位置。顺便说一句,不要再提“在结尾”这个词了。无法插入到特定位置。您只能在
SELECT
中使用
ORDER BY
来按您想要的顺序返回它。@MichalKrejč,我认为您应该在视图中使用而不是触发器。如果视图包含多个基表,则不能插入到视图中。它如何知道将每个表的信息放在哪里?Access能够做到这一点,并且由ADO引擎处理。SQL中的情况不同Server@SeanLange这部分是我要问的。如果有办法指定ITI,如果视图有多个表,则需要向视图添加触发器,以便添加逻辑以将记录放在正确的位置。顺便说一句,不要再提“在结尾”这个词了。无法插入到特定位置。您只能在
选择中使用
ORDER BY
以按您想要的顺序返回。@MichalKrejč,我认为您应该在视图中使用INSTEAD而不是触发器。我使用INSTEAD OF,效果很好。谢谢你的帮助。我用了代替,效果很好。谢谢你的帮助。