首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑插入表sql

编辑插入表sql
EN

Stack Overflow用户
提问于 2021-09-08 20:24:10
回答 2查看 126关注 0票数 0

插入时,如果值为null,则需要编辑该值。我创建一个触发器,但不知道如何编辑插入的表。

代码语言:javascript
复制
ALTER TRIGGER [trigger1] on [dbo].[table]
instead of insert
as
    declare @secuencia bigint, @ID_PERSONA VARCHAR;

    select @secuencia = SECUENCIA from inserted 
    select @ID_PERSONA = ID_PERSONA from inserted 

    if @secuencia is null begin         
        set inserted.SECUENCIA = NEXT VALUE FOR SEQ_BIOINTEG --(Sequence)          
    end 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-08 21:07:50

我不知道如何编辑插入的表。

你不知道。那张桌子是只读的。

请注意您的触发器是如何显示:

代替insert

无法编辑插入的表。

相反,您要做的是为原始表设置一个INSERT命令,使用插入表中的数据筛选插入的行-主要是通过一个联接。

从逻辑上说,更改插入没有任何意义--因为SQL中的触发器是两件事之一:

  • ,而不是-那么插入开始时不会发生实际的插入。不是执行插入操作,而是调用触发器。因此,更改insert -没有任何意义。
  • 在-然后插入已经发生(然后更新行)。当触发器在更新后运行时,更改插入没有意义。

注意,我说的行-您的触发器有一个非常基本的错误:它假设惰性包含一行。它是一个表--更改可能来自插入多行的insert语句(这很简单,即select into,或简单地说是insert具有多行值的insert)。处理好这些。

从插入中选择@ID_PERSONA = ID_PERSONA

没有任何意义-插入是一个表,所以ID_PERSONA从插入包含什么值,如果插入2行?您必须像对待任何其他表一样对待插入表。

票数 1
EN

Stack Overflow用户

发布于 2021-09-08 22:48:40

除了触发器代码中的所有问题(正如其他人提到的那样)之外,在表中使用SEQUENCE值的最简单方法是将其放在DEFAULT约束中:

代码语言:javascript
复制
ALTER TABLE dbo.[table]
ADD CONSTRAINT DF_table_seq
  DEFAULT (NEXT VALUE FOR dbo.SEQ_BIOINTEG)
  FOR SECUENCIA;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69109258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档