当前位置: 首页 > 面试题库 >

如何在更新查询中动态设置表和字段名称?

沃威
2023-03-14
问题内容

我想遍历一个表列表。对于每个表,我想运行一个更新查询。

伪代码:

ArrayOfTablesObjects = {['tablename1','fieldname1'],['tablename2','fieldname2']......}

foreach @tablename in ArrayOfTablesObjects

UPDATE @tablename
SET  @fieldname = 'xyz'
WHERE @fieldname = '123'

end foreach

问题答案:

感谢Harpo的回答。我已经使用该想法来构建以下sql语句。我们有许多表50+,它们都具有相同的数据类型(员工ID),但字段名称可能不同。因此,根据表名称,要更新的字段将有所不同。我实际的WHERE和SET语句比本示例要复杂得多,但这对这个问题并不重要。

我首先创建一个临时表来存储要更新的表/字段。

然后,我遍历这些记录,并生成SQL。对于那些不喜欢动态sql的人,您可以只使用一条print语句,然后将其复制粘贴到另一个查询窗口中并执行它。或者,您可以调用EXEC语句。

我想接受您的回答,但后来并没有完全回答我的问题,部分原因是我没有完全解释自己。无论哪种方式,谢谢您的帮助。

DECLARE @TableFieldDictionary TABLE
(
    tablename VARCHAR(100),
    fieldname varchar(100)
)

insert into @TableFieldDictionary(tablename,fieldname) values ('table1','field1');
insert into @TableFieldDictionary(tablename,fieldname) values ('table2','field2');
--put more insert statements here.  In my case, I have 50 inserts


declare cursor_dictionary cursor
for select tablename, fieldname from @TableFieldDictionary

open cursor_dictionary

declare @looptablename VARCHAR(100)
declare @loopfieldname varchar(100)

fetch next from cursor_dictionary
into @looptablename,@loopfieldname

DECLARE @UpdateSql AS varchar(max)
WHILE @@FETCH_STATUS = 0
BEGIN   
    SET @UpdateSql = 'UPDATE ' + @looptablename + 
                     ' SET ' + @loopfieldname + ' = 123' +
             ' WHERE ' + @loopfieldname + ' = 456'

    print @updatesql
    --EXEC(@updatesql)

    fetch next from cursor_dictionary
    into @looptablename,@loopfieldname
END

CLOSE cursor_dictionary
DEALLOCATE cursor_dictionary


 类似资料:
  • 我使用的是Spring boot 1.4.x分支和Spring Data MongoDB。 当我启动应用程序时,我会出现以下错误: 你知道吗?

  • 问题内容: 如何为欧姆对象动态设置字段? 问题答案: 中的class方法为命名属性定义访问器和更改器方法: 因此,当您说时,您可以免费获得以下方法: 您可以像这样调用mutator方法: 如果您真的想说,那么可以在课堂上添加以下内容: 您可能还希望访问器版本保持对称:

  • 问题内容: 我在一个表中有一个XML列,如下所示: 我想像这样更新此字段: 我想通过SQL Server中的一个函数来做。 谢谢! 问题答案: 正如Mikael所述,您需要描述更新背后的逻辑。但是对于上面的预期输出,以下应该起作用:

  • 问题内容: 我想用一些动态问题来填充表单(在此处提示): 一切正常,除了模型实际上是Answers [“ {{question.Name}}”],而不是评估后的Answers [“ GenderQuestion”]。如何动态设置型号名称? 问题答案: http://jsfiddle.net/DrQ77/ 您只需将javascript表达式放入中。

  • 我们的应用程序使用Dropwizard和JDBI来处理对Postgres数据库的查询。 通常,我们会有一个不同的数据库用于生产和生产,但现在我们正在与一个新系统集成,这将共享用于生产和产品的相同数据库,但使用了一组不同的表。 例如,我们将有表用户和users_stg 有没有一种方法可以将表名以动态方式传递给查询,以便我们可以在属性文件中设置表名? 当前查询的示例 所需查询示例 当然,@Bind不会