SQL如何像这样更新?
我正在尝试更新[Temp_LTGData]表中的所有SQL行,将[CORP_REG_NO]值设置为[CUSTOMER_NUMBER]匹配的同一表中另一行的值 最终,我需要用相当多的专栏来做这件事,有人知道这是否可以做到吗 我似乎无法在select查询中使用LTGSource别名:(SQL如何像这样更新?,sql,tsql,sql-update,Sql,Tsql,Sql Update,我正在尝试更新[Temp_LTGData]表中的所有SQL行,将[CORP_REG_NO]值设置为[CUSTOMER_NUMBER]匹配的同一表中另一行的值 最终,我需要用相当多的专栏来做这件事,有人知道这是否可以做到吗 我似乎无法在select查询中使用LTGSource别名:( 感谢各位的反馈,这真是太棒了,我甚至学会了一些解决这个问题的不同方法(投票给你们大家)。尝试下面的方法,以了解您正在做的事情 UDPATE [MandS].[dbo].[Temp_LTGData] LTGSource
感谢各位的反馈,这真是太棒了,我甚至学会了一些解决这个问题的不同方法(投票给你们大家)。尝试下面的方法,以了解您正在做的事情
UDPATE [MandS].[dbo].[Temp_LTGData] LTGSource
SET [CORP_REG_NO] = (SELECT [CORP_REG_NO]
FROM [MandS].[dbo].[Temp_LTGData]
WHERE ([CORP_REG_NO] IS NULL
AND [CUSTOMER_NUMBER] = ToUpdate.[CUSTOMER_NUMBER] ))
FROM {MandS].[dbo].[Temp_LTGData] ToUpdate
where [CORP_REG_NO] IS NULL
但是,您的查询中有一个错误,我认为子查询不应为NULL。请尝试以下操作:
UPDATE Temp_LTGData LTGSource
SET Col1 = L2.Col1, Col2 = L2.Col2, Col3 = L2.Col3
FROM LTGSource L1
JOIN LTGSource L2 ON L2.CORP_REG_NO IS NOT NULL AND L1.CUSTOMER_NUMBER = L2.CUSTOMER_NUMBER
WHERE L1.CORP_REG_NO IS NULL
这样就可以了。您将可更新表加入到自身中,这样您就可以访问旧行和新行进行更新。这样,您可以一次更新多个列。类似这样的操作将允许您处理具有源行和目标行的多个列 如果需要为不同的列链接不同的行,那么就更复杂了 如果我理解正确,过滤到
CORP\u REG\u NO为空
当然只适用于CORP\u REG\u NO,因此您不想进行过滤,除非根据您的问题限制目标行和源行独立于特定列过滤器
Update
target
Set
[CORP_REG_NO] = CASE WHEN target.[CORP_REG_NO] IS NULL THEN source.[CORP_REG_NO] ELSE target.[CORP_REG_NO] END,
...and again...
FROM
[MandS].[dbo].[Temp_LTGData] target
JOIN
[MandS].[dbo].[Temp_LTGData] source ON target.[CUSTOMER_NUMBER] = source.[CUSTOMER_NUMBER]
WHERE
a filter to restrict rows perhaps
我无法将此表本身连接起来,因为此表中的记录是来自远程位置的4个表之间连接的结果,我需要运行上述查询,以确保在将数据拆分回4个表进行处理时获得不同的记录。否则,这是我通常采用的方法首先,简单地添加一个主键,然后加入,这将使生活变得更简单,从而使这成为最有效的解决方案。
Update
target
Set
[CORP_REG_NO] = CASE WHEN target.[CORP_REG_NO] IS NULL THEN source.[CORP_REG_NO] ELSE target.[CORP_REG_NO] END,
...and again...
FROM
[MandS].[dbo].[Temp_LTGData] target
JOIN
[MandS].[dbo].[Temp_LTGData] source ON target.[CUSTOMER_NUMBER] = source.[CUSTOMER_NUMBER]
WHERE
a filter to restrict rows perhaps