在UPDATE查询中为SET动态传递列名(SQLITE3)

时间:2014-04-29 13:46:16

标签: sql sqlite

UPDATE empInfo 
SET lastName = (SELECT lastName FROM tmp_empInfo 
                WHERE tmp_empInfo.id = empInfo.id),firstName = 
               (SELECT firstName FROM tmp_empInfo WHERE 
               tmp_empInfo.id = empInfo.id) 
               WHERE ((SELECT COUNT(*) FROM tmp_empInfo 
               WHERE tmp_empInfo.id = empInfo.id) > 0)    

我正在更新上述查询中的两列。我想在数组中传递列名和表名,并使SET参数的查询动态化。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您尝试过吗?

def update_task(conn, targets, task):
    sql = f''' UPDATE systemData
          SET {targets}                 
          WHERE id = ?'''

    cur = conn.cursor()
    cur.execute(sql, task)
    conn.commit() 

target = 'timesWater = ?, timesMinerals = ?'
task = (5, 2, 1)
update_task(conn, target, task)

答案 1 :(得分:-1)

替换查询

update empInfo
    Set lastName = tmp.lastName,
        firstName = tmp.firstName
    from tmp_empInfo tmp
    where empInfo.id = tmp.id

答案 2 :(得分:-1)

在非常复杂的场景中,您最好使用所谓的动态sql,您可以将查询构造为字符串,然后将其作为sql执行。在这种情况下,添加对动态参数的支持要容易得多。以下链接为您提供基本的想法sp_executesql

我们动态提供表名的示例:

CREATE PROCEDURE general_select1 @tblname sysname,
                                 @key     varchar(10) AS
DECLARE @sql nvarchar(4000)
SELECT @sql = ' SELECT col1, col2, col3 ' +
              ' FROM dbo.' + quotename(@tblname) +
              ' WHERE keycol = @key'
EXEC sp_executesql @sql, N'@key varchar(10)', @key