tsql - 从一个SELECT语句中更新表格

19 浏览
0 Comments

tsql - 从一个SELECT语句中更新表格

我有两个表格,TableA和TableB。

TableA有一个varbinary(max)列,命名为[BinaryA]。

TableB有一个列(命名为"Volume",类型为"Long"),其中包含每个varbinary的容量。

为了选择所有的容量,我查询

SELECT ID, MyVolume = DATALENGTH([Binary])
FROM [VAULT].[TABLEA]

然后,我想用它的容量更新TableB。

我写下

update [TableB] 
set [VOLUME]  = ( SELECT MyVolume = DATALENGTH([Binary])
              FROM [VAULT].[TABLEA] ab
          WHERE id = ab.[Id])

然后我收到以下提示

无法将NULL值插入到列'Volume'中,表'MySchema.Asset';该列不允许为空。更新失败。

尽管当我运行

SELECT ID, MyVolume = DATALENGTH([Binary])
FROM [VAULT].[TABLEA]

时,我没有收到任何NULL值。

0
0 Comments

问题的原因是RetrieveAccountNumber表中的AccountNumber需要更新到tableB表中的volume字段。解决方法是使用UPDATE语句从SELECT语句中获取RetrieveAccountNumber表中的AccountNumber,并将其更新到tableB表中的volume字段。

文章如下:

在T-SQL中,有时候我们需要将一个表中的数据更新到另一个表中。而在更新过程中,我们可能会遇到一些复杂的情况,比如需要从一个SELECT语句中获取数据并更新到另一个表中的某个字段。下面就来看一个具体的例子。

假设我们有两个表,一个是tableB,另一个是RetrieveAccountNumber。我们需要将RetrieveAccountNumber表中的AccountNumber更新到tableB表中的volume字段。那么我们可以使用以下的UPDATE语句来实现:

UPDATE tableB
SET    [volume] = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  tableB.leadid =RetrieveAccountNumber.LeadID) 
WHERE Sales_Import.leadid = (SELECT  RetrieveAccountNumber.LeadID 
                             FROM   RetrieveAccountNumber 
                             WHERE  tableB.leadid = RetrieveAccountNumber.LeadID)

在上面的UPDATE语句中,我们首先使用一个子查询来从RetrieveAccountNumber表中获取AccountNumber。这个子查询的条件是tableB.leadid =RetrieveAccountNumber.LeadID。然后我们将这个子查询的结果更新到tableB表中的volume字段。

需要注意的是,在执行UPDATE语句时,我们还需要使用WHERE子句来指定更新的条件。在这个例子中,我们使用了一个嵌套的子查询来获取RetrieveAccountNumber表中的LeadID,并将其作为更新条件。

通过以上的UPDATE语句,我们就可以将RetrieveAccountNumber表中的AccountNumber更新到tableB表中的volume字段了。

需要注意的是,在这个例子中,我们并没有提到RetrieveAccountNumber表与TableA的关系。根据问题描述,RetrieveAccountNumber表与TableA可能存在某种关联,但在给出的代码中并没有体现出来。因此,我们无法确定RetrieveAccountNumber表与TableA之间的具体关系。

0
0 Comments

问题原因:

这个问题的出现是因为需要通过一个SELECT语句来更新一个表。具体来说,需要将TableB表中的某个列(VOLUME)的值更新为另外一个表([VAULT].[TABLEA])中的某个列(Binary)的值。

解决方法:

可以使用以下的T-SQL语句来解决这个问题:

UPDATE TableB 
SET TableB.[VOLUME] = DATALENGTH([T2.Binary])
FROM TableB
INNER JOIN [VAULT].[TABLEA] T2 ON TableB.TAL_ID = T2.TAL_ID

这个语句中,首先通过INNER JOIN语句将TableB表和[VAULT].[TABLEA]表关联起来,关联条件是它们的ID字段相等。然后使用UPDATE语句将TableB表中的VOLUME列的值更新为[VAULT].[TABLEA]表中Binary列的值的长度(使用DATALENGTH函数来获取长度)。

这样就可以通过一个SELECT语句来更新TableB表中的数据了。

0