sql更新列,其中列名等于用户密钥
我想将列名为“USER_KEY”的所有列更新为值“admin”。这可能吗 我可以使用以下sql获取具有指定列名的所有表名和列名:sql更新列,其中列名等于用户密钥,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,我想将列名为“USER_KEY”的所有列更新为值“admin”。这可能吗 我可以使用以下sql获取具有指定列名的所有表名和列名: 但我不知道如何在update语句中使用这些 您可以通过PL/SQL实现这一点(请注意,这是oracle语法,但对于SQL server和其他SQL,想法应该是相同的)。如下所示,构建列表/表详细信息,通过构建sql update语句传递值,并在循环中执行所有语句 SET AUTOCOMMIT ON BEGIN FOR my_table_colums in ( sele
但我不知道如何在update语句中使用这些 您可以通过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;
/
这是一次性任务还是需要重复执行?这是一次性任务。如果是一次性任务,您只需将每个结果行的UPDATE语句(将
c.name
和t.name
前后的语句串联)吐出到文本结果窗口中,将生成的脚本复制到n过去并运行。谢谢。我需要重写它,看看它是否工作,因为Mssql没有for循环和其他一些命令。
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;
/