【问题标题】:tsql - updating a table from a select statementtsql - 从选择语句更新表
【发布时间】:2013-06-07 11:56:29
【问题描述】:

我有两张桌子。表 A 和表 B。
TableA 包含一个 varbinary(max) 列 - 名为 [BinaryA] TableB 包含一个包含每个 varbinary 卷的列(名为“Volume”,类型为“Long”)。

为了选择我查询的所有卷

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])

我收到的比

Cannot insert the value NULL into column 'Volume', table 'MySchema.Asset';
column does not allow nulls. UPDATE fails.

虽然我在运行时没有收到任何 NULL

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

【问题讨论】:

  • TableA 和 TableB 是否相关?如果您的子选择返回多行,则将您的 VOLUME 设置为您的子选择将失败。您是否尝试将 tableA 连接到 tableB?

标签: sql tsql


【解决方案1】:

试试这个查询:

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

假设 TableB 和 [VAULT].[TABLEA] 通过 ID 字段关联。

【讨论】:

    【解决方案2】:
    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)
    

    【讨论】:

    • RetrieveAccountNumber 与 TableA 有什么关系? RetrieveAccountNumber 是从哪里来的?它不在 OP 问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2023-03-09
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多