当前位置: 首页 > 面试题库 >

无法在View SQL Server 2005上执行删除

莘绍元
2023-03-14
问题内容

我无法在视图上执行删除。各个表上的一切工作正常。

EDIT1:添加了触发器

CREATE TRIGGER myTrigger
ON [ViewName]
INSTEAD OF DELETE
AS
DELETE
FROM [ViewName]
WHERE [ColumnName] < DATEADD(Day, -90, GETDATE())

添加触发器之前出现以下错误

View or Function "blah" is not updateable because the modification affects multiple base tables>

问题答案:

好的,我们假设一个实例将发生此错误(因为您没有显示视图定义)。

假设我们有一个观点:

CREATE VIEW dbo.V1
with schemabinding
as
    select 'T1' as TabName,T1ID as ID,ImportantDate from dbo.T1
    union all
    select 'T2',T2ID,ImportantDate from dbo.T2

我们现在尝试:

DELETE from dbo.V1 where ImportantDate < DATEADD(day,-90,CURRENT_TIMESTAMP)

我们会得到您所显示的错误(或类似错误)。因此,我们需要一个触发器:

CREATE TRIGGER T_V1_D
on dbo.V1
instead of delete
as
    set nocount on
    delete from dbo.T1 where T1ID in (select ID from deleted where TabName = 'T1')
    delete from dbo.T2 where T2ID in (select ID from deleted where TabName = 'T2')

如果没有简单的方法将deleted伪表中的行与需要从每个基本表中删除的行相关联,则此触发器的编写将变得更加复杂。



 类似资料:
  • 当用户按下ctrl键时,我试图在Chrome中保存HTML文件,但Chrome崩溃了。 (我只想下载HTML文件的源代码) 我读到它发生是因为我的文件比1.99M大... 在第一次尝试中(在我知道Chrome崩溃之前): 第二次尝试,在我读到崩溃后,我使用了: 这里我得到了错误: 我不知道,但我读到我需要将我的字符串编码为base 64:如何在JavaScript中将字符串编码为Base64? 有

  • 关于这个问题有好几篇帖子,但仍然没有找到答案。这是父类Userr。在@OneToMany关系中,我想删除一个特定的子帐户。 现在,当我通过“删除”查询执行此操作时,我得到以下异常。 组织。springframework。刀。InvalidDataAccessApiUsageException:执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredExceptio

  • 问题内容: 我正试图让nvidia-docker在我的centos7系统上运行: 到目前为止,一切都很好: 现在,让我们尝试使用nvidia运行时: 但是奇怪的是 问题答案: 所以…最后,我完全禁用了selinux并重新启动,并对其进行了修复。

  • 无法对代理执行签出:“”C:\Program Files\git\bin\git.exe“-C Core.askpass=C:\TeamCity\BuildAgent\Temp\BuildTmp\Pass8517307457314531623.bat-C Credential.helper=-C Credential.helper=C:/TeamCity/Buildagent/Temp/Build

  • 问题内容: 我试图通过ajax jQuery的方法从跨域服务器检索XML,并且控制台上出现以下错误消息: 导致此错误的代码是: 问题答案: 问题是同步选项由以下方式指定: 这似乎在Chrome中不起作用,可能是由于jQuery的ajax方法的规范,该规范说: 跨域请求和dataType:“ jsonp”请求不支持同步操作。 奇怪的是,Firefox和Internet Explorer似乎忽略了该规

  • 这只是为了删除。插入和检索工作良好。 我在谷歌搜索这个问题,但唯一的结果是解决了封闭的结果集,而这里不是这样。