【问题标题】:SQL how to update table based name tablename from other table columnSQL如何从其他表列更新基于表的名称表名
【发布时间】:2015-04-30 08:46:17
【问题描述】:

将生产数据库迁移到测试环境时,我需要更新多个表中的值。表的名称可以在另一个表中找到。我怎样才能做到这一点?

我的意思是:

for each value$ in select replace(tablename,' ','') from table1

update value$ set replace(column1,'A','B')

它看起来像一个嵌套的 SQL 语句。

【问题讨论】:

    标签: sql-server tablename


    【解决方案1】:

    您需要为此构建一些动态 sql。我更喜欢一次性构建并整体执行:

    declare @sql varchar(max) = '' 
    select @sql += '
        update ' + QUOTENAME(replace(tablename,' ','')) + ' 
            set column1 = replace(column1,''A'',''B'')'      
    from table1
    
    exec (@sql)
    

    【讨论】:

    • 我认为您只需要set column1 = replace(column1, ''A'', ''B'') - 目前缺少您正在设置的列名,并转义字符串值周围的单引号。
    • @Bridge:已修复 - taa - 刚刚从 OP 复制了实际更新。
    • 您也可以使用 QUOTENAME 为您转义表名(例如,如果表名中有单引号/方括号,则应该正确执行):... select @sql += 'update ' + QUOTENAME(replace(tablename,' ','')) + ' set ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多