Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL如何像这样更新?_Sql_Tsql_Sql Update - Fatal编程技术网

SQL如何像这样更新?

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

我正在尝试更新[Temp_LTGData]表中的所有SQL行,将[CORP_REG_NO]值设置为[CUSTOMER_NUMBER]匹配的同一表中另一行的值

最终,我需要用相当多的专栏来做这件事,有人知道这是否可以做到吗

我似乎无法在select查询中使用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