sql - 使用查询结果作为表名进行更新
问题描述
我有一个表,它返回我想用于更新查询的行。
这个查询:
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_table
andid
作为我的更新查询的条件,所以对于每一行father_table
它都会执行这个:
UPDATE dataview_table SET status = 5 WHERE id = id
我怎样才能做到这一点?
解决方案
您无法直接获取并执行它,而是必须使用动态 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)
推荐阅读
- laravel - 如何检索提供的 ID 的倒数第二行
- javascript - 浏览器事件循环如何处理宏任务?
- java - Array.toString 返回内存地址,而不是实际值
- angular5 - 如何减少使用 *ngFor 结构指令在表中显示列表(从数据库中获取的 json 对象)的时间?
- android-studio - Android Studio 3.3 xml 在 LinearLayout 上预览内部阴影
- scalability - AKF 比例立方体替代品?
- testing - 如何将测试用例/需求套件从其他测试计划添加到新的测试计划并删除它们而不删除原始
- join - KDB 如何连接具有不同列名的表
- android - E/FirebaseInstanceId:令牌检索失败:SERVICE_NOT_AVAILABLE
- checkbox - 在递归剔除中获取检查的属性