sql update列,其中列名等于USER_KEY

时间:2018-05-28 08:15:49

标签: sql sql-server sql-update

我想将列名为“USER_KEY”的所有列更新为“admin”。这可能吗?

我可以使用以下sql script获取具有指定列名的所有表名和列名:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%USER_KEY%'
ORDER BY    TableName
            ,ColumnName;

但我不知道如何在更新声明中使用它们。

1 个答案:

答案 0 :(得分:0)

你可以通过PL / SQL实现这一点(注意这是oracle语法,但SQL Server其他SQL的想法应该是一样的)。类似下面的内容,构建列表/表详细信息,通过构建sql update语句传递值并在循环内执行语句...

SET AUTOCOMMIT ON
BEGIN
FOR my_table_colums in (
select      c.name  as 'columnname'
            ,t.name as 'tablename'
from        sys.columns c
join        sys.tables  t   on c.object_id = t.object_id
where       c.name like '%user_key%'
order by    tablename
            ,columnname)
LOOP
/*-- build your dynamic sql and assign to a variable --*/
mysql_update_statement := 'update '||table_colums.tablename ||' set  '||table_colums.columnname||'= '''admin''';

/*-- display your dynamic update sql--*/
DBMS_OUTPUT.PUT_LINE(mysql_update_statement );

/*-- execute your dynamic update sql--*/
EXECUTE IMMEDIATE mysql_update_statement;
END LOOP;
END;
/