sqlserver中的两个表如何实现同时更新?(详见问题说明)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver中的两个表如何实现同时更新?(详见问题说明)相关的知识,希望对你有一定的参考价值。

表1各列为id,rq 表2各列为id_2,rq_2,beizhu
其中id_2列值等于id,rq_2列值等于rq ,问如何在更新表1的同时更新表2 ?update语句应该如何写?

参考技术A 表1和表2建立一个外键关联,设置成集联更新就行了
用触发器也可以
参考技术B UPDATE 表2 SET 表2.RQ_2=表1.R1
FROM 表2 INNER JOIN 表1 ON 表2.ID_2=表1.ID
参考技术C 建立关系或用触发器本回答被提问者采纳

如何从sql中的两个表之一中搜索

【中文标题】如何从sql中的两个表之一中搜索【英文标题】:How to search from one of two tables in sql 【发布时间】:2014-02-10 12:38:18 【问题描述】:

我在 Sql server 中使用了两个表 OfferedJoined..

我正在提供候选人加入公司。在提供时,我会提到加入日期。它将存储在Offered 表中,而不是Joined 表中。

候选人可以在不同的日期加入。加入日期将存储在Joined 表中。这不应该在Offered 表中更新。

现在我正在创建一个结合Offered and Joined Report.. 的报告。其中我有一个名为Date of Joining.. 的列。在该列中,如果候选人尚未加入,日期将来自Offered 表..如果候选人加入意味着,日期将从Joined table..在表格之间进行选择,我使用了函数..

begin
declare @chk int
declare @JoiningDate datetime
set @chk=0
select @chk=id from MemberJoiningDetails where JobPostingId=@JobPostingId and MemberId=@MemberId
if(@chk != 0)
begin
  select @JoiningDate=JoiningDate from MemberJoiningDetails where JobPostingId=@JobPostingId and MemberId=@MemberId
end
else
begin
  select @JoiningDate=JoiningDate from MemberHiringDetails where JobPostingId=@JobPostingId and MemberId=@MemberId
end
return @JoiningDate
end

我保存了这个函数并在select语句中调用了这个函数..

现在我的问题是,我想根据加入日期条件创建报告。为此,WHERE 条件是从 C# 传递的。

但我的疑问是,如果候选人还没有加入,where 条件应该从Offered 表中检查。如果候选人加入我,where 条件应该从Joined 表中检查.. 怎么做这..?

【问题讨论】:

【参考方案1】:

与其检查一个是否为空,不如将其放入COALESCE 函数中。在函数内部,您只需先选择 Hire date,如果它为 null,它将返回加入日期。这样您就不必担心他们是否被雇用。如果我正确阅读您的表格,查询将如下所示。

SELECT @JoiningDate = COALESCE(h.JoiningDate, j.JoiningDate)
    FROM MemberJoiningDetails AS j
    LEFT OUTER JOIN MemberHiringDetails AS h
        ON j.JobPostingId = h.JobPostingId
           AND j.MemberId = h.MemberId
    WHERE j.JobPostingId = @JobPostingId
        AND j.MemberId = @MemberId

【讨论】:

当我执行您的查询时,它会从COALESCE 中给出的第一个表中获取日期。它不是从第二个表中获取的.. COALESCE 只会得到第一个非空值。这就是为什么如果您将加入日期从Joined 表放在第一位,然后从Offered 表中列出加入日期,您将始终得到一个值。 如果我对加入的候选方法执行上述查询,它只从Hiring 表中获取日期。而不是从Joining 表中。所以,我改为COALESCE(j.JoiningDate, h.JoiningDate)..在这种情况下,它从Joining 表中获取日期。但是如果我执行 for yet to join 候选方式,它返回空值,而不是来自Hiring 表。。 我认为这就是你想要的,如果 Hiring 表为空而不是从 Joining 表中获取日期。

以上是关于sqlserver中的两个表如何实现同时更新?(详见问题说明)的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver如何实现两个表的组合输出?

请问sqlserver中的两个表怎么进行关联

SQLSERVER如何在数据库里根据某个字段,查出该表名字

SqlServer触发器实现表的级联插入级联更新

关联两个表有几种方法,比如说是sqlserver数据库的关联方式

如何将EXCEL表按另一个EXCEL表中的内容进行搜索,然后将结果复制到新的工作表中?