首页 > 解决方案 > 使用查询结果作为表名进行更新

问题描述

我有一个表,它返回我想用于更新查询的行。

这个查询:

SELECT 
   'data_'+ REPLACE(ft.uid, '-', '_') dataview_table,  
    ft.id
FROM  father_table ft

返回:

dataview_table                              id
data_A65225EB_AEE4_478B_AC86_03E5F0D92F5B   10000291
data_0234FF89_E561_4918_870A_3FFD9928E647   10000291
data_0234FF89_E561_4918_870A_3FFD9928E647   10000291
data_021F9D95_8F87_402B_A53B_5C5AE4084D9C   10000291

我想要做的是使用dataview_tableandid作为我的更新查询的条件,所以对于每一行father_table它都会执行这个:

UPDATE dataview_table SET status = 5 WHERE id = id

我怎样才能做到这一点?

标签: sqlsql-servertsql

解决方案


您无法直接获取并执行它,而是必须使用动态 SQL 或查询字符串方法。像这样

DECLARE @Qry VARCHAR(MAX)

;WITH CTE
AS
(
    SELECT 
        Qry = 'UPDATE data_'+ REPLACE(ft.uid, '-', '_')+' SET status = 5 WHERE id = '+    CAST(ft.id AS VARCHAR(20))
        FROM  father_table ft
)
SELECT
    @Qry = STRING_AGG(Qry,';')
    FROM CTE
    
EXEC(@Qry)

推荐阅读