如何更新另一个表中的信息?

时间:2016-01-29 06:24:28

标签: sql-server sql-server-2008 sql-server-2008-r2

我在数据库中有两个表,如屏幕截图所示。

enter image description here

tbCompanyAgent中存在一些常见列值,如tbLicence中的值,如LicenseNumber,LicenseIssueDate和LicenseExpirationDate。在一些复杂的sql查询和业务需求之后,列号StateIssuedLicenseNumber,StateIssuedLicenseIssueDate和StatedIssuedLicenseExpirationDate以及tbLicence中的LicenceNumber,DateIssued和ExpirationDate列将合并到tbCompanyAgent中的单个列LicenseNumber,LicenseIssueDate和LicenseExpirationDate。

对于由Group Id Column LicenceType标识的同一组记录,StateIssuedLicenseNumber,StateIssuedLicenseIssueDate和StatedIssuedLicenseExpirationDate中的值也相同。

实际上,所有许可证都有一个常驻条目,存储在StateIssuedLicenseNumber,StateIssuedLicenseIssueDate和StatedIssuedLicenseExpirationDate列中,并由Resident列标识为1。

非居民许可证存储在LicenceNumber,DateIssued和ExpirationDate中,值为0。

我的问题是,如果用户尝试在tbLicence中进行一些应该反映在tbCompanyAgent上的更新。为此,我编写了如下代码行的程序。

[ 1, 4, 8, 10, 20, 30 ].map(&nine_is_greater_than)
# => [ true, true, true, false, false, false ]

它不会更新tbCompanyAgent中的信息。 请帮我!!!

2 个答案:

答案 0 :(得分:0)

首先执行以下查询,看看您是否收到任何记录。如果您有记录,请验证一次。

SELECT L.LicenceNumber, L.LicenceIssueDate, L.LicenceExpirationDate
FROM [tbCompanyAgent] CA
INNER JOIN tbLicence L on CA.LicenceNumber = L.LicenceNumber
WHERE L.LicenceNumber  = @LicenceNumber
AND L.StateIssuedLicenseNumber = @StateIssuedLicenceNumber
AND L.LicenceIssueDate = @CDateIssued
AND L.StateIssuedLicenseIssuedDate = @CStateIssuedDateIssued
AND L.StateIssuedLicenseExpirationDate = @CStateIssuedExpirationDate

如果上面的查询给你想要的结果,你要在其他表中更新,只需删除select语句并使用这样的更新语句。

UPDATE CA
SET CA.LicenceNumber = L.LicenceNumber, CA.LicenceIssueDate = L.LicenceIssueDate, 
 CA.LicenceExpirationDate = L.LicenceExpirationDate
FROM [tbCompanyAgent] CA
INNER JOIN tbLicence L on CA.LicenceNumber = L.LicenceNumber
WHERE L.LicenceNumber  = @LicenceNumber
AND L.StateIssuedLicenseNumber = @StateIssuedLicenceNumber
AND L.LicenceIssueDate = @CDateIssued
AND L.StateIssuedLicenseIssuedDate = @CStateIssuedDateIssued
AND L.StateIssuedLicenseExpirationDate = @CStateIssuedExpirationDate

答案 1 :(得分:0)

我认为您应该包含要更改的列的哪个表,以便程序准确知道它应该更新的内容?例如tbLicence.LicenceNumber