我正在尝试更新[Temp_LTGData]表中的所有SQL行,将[CORP_REG_NO]值设置为[CUSTOMER_NUMBER]匹配的同一表中另一行的值。
最终我需要用很多专栏做这个,有人知道这是否可以做到?
我似乎无法在选择查询中使用LTGSource别名:(
Update [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] = LTGSource.[CUSTOMER_NUMBER] ))
where [CORP_REG_NO] IS NULL
感谢那些非常棒的反馈人员,我甚至学会了一些解决这个问题的方法(投票给大家)。
答案 0 :(得分:2)
尝试以下操作以准确了解您的操作
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
但是,您的查询中有错误我相信子查询应该是IS NOT NULL。
答案 1 :(得分:2)
这样的东西可以让你处理包含源和目标行的许多列
如果您需要为不同的列链接不同的行,那么它就更复杂了
如果我理解正确,过滤到CORP_REG_NO IS NULL
当然只适用于CORP_REG_NO,因此您不想过滤,除非根据您的问题限制目标和源行,而不依赖于特定的列过滤器。< / p>
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
答案 2 :(得分:1)
试试这个:
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
那应该为你做。您正在将可更新表连接到自身,因此您可以访问旧行和新行以进行更新。这样,您可以一次更新多个列。