sql 中如何设置触发器使修改一个表中列的值时,同时修改另一个表的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 中如何设置触发器使修改一个表中列的值时,同时修改另一个表的值相关的知识,希望对你有一定的参考价值。

(1)在表depart上创建一个触发器 depart_update , 当更改部门号时同步更改 worker表中对应的部门号。

参考技术A 可以创建如下类似触发器
create trigger depart_update on depart for update
as
begin
if update(deptno)
begin
update worker set deptno = b.deptno from inserted b where worker.col1 = b.col1

end

end本回答被提问者采纳

SQL Server 表未显示表中列的值

【中文标题】SQL Server 表未显示表中列的值【英文标题】:SQL Sever table is not showing value for a column in a table 【发布时间】:2020-07-08 19:28:25 【问题描述】:

我们正在使用 Attunity 将数据从 Oracle 复制到 SQL Server。

在 Oracle 数据库中,表 MEMO 有一个 Description 列,该列具有一定的价值。

(for ID = 1)
Description = 'This is test record'

但是 SQL Server 没有在 Description 列中显示该值(其中 id =1),它显示为空。

当我使用 Dbeaver 查询同一个表时,Description 列显示一个字符“p”。

Description = 'P'

我尝试在 Notepad++ 中复制启用显示所有字符但仍然没有用。帮助我解决这种奇怪的行为。

【问题讨论】:

【参考方案1】:
 DECLARE @Result varchar(255)
       SET @Result = ''

       DECLARE @nchar nvarchar(1)
       DECLARE @position int
       SET @position = 1
       
       WHILE @position <= LEN(@nstring)
        BEGIN
            SET @nchar = SUBSTRING(@nstring, @position, 1)
        IF((ASCII(@nchar) BETWEEN 64 and 90) OR (ASCII(@nchar) BETWEEN 97 and 122) OR (ASCII(@nchar) BETWEEN 48 and 57) OR ASCII(@nchar) = 32)
             BEGIN
                    SET @Result = @Result + @nchar
             END
         ELSE 
            BEGIN
             DECLARE @asciichar varchar(10)
             SET @asciichar = ASCII(@nchar)
             SET @Result = @Result + REPLACE(@nchar,CHAR(@asciichar),'')
           END
       SET @position = @position + 1
   END

RETURN @Result

END

【讨论】:

以上是关于sql 中如何设置触发器使修改一个表中列的值时,同时修改另一个表的值的主要内容,如果未能解决你的问题,请参考以下文章

如何修改 MySQL 表中列的大小?

如何修改表SQL中列中的值

更新查询以根据不同表中的值更改一个表中列的现有值

如何将sqlalchemy中列的默认值设置为关系中列的值?

如何计算表中列的每个值?

如何跟踪数据库表中列的位置