tsql - 从一个SELECT语句中更新表格
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值。
问题的原因是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之间的具体关系。
问题原因:
这个问题的出现是因为需要通过一个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表中的数据了。