我想在python中编写一个SQL语句,它将表名作为变量传递。但是,我得到以下错误:必须声明表变量“@ P1”。我怎样才能传递一个表名作为SQL中的变量 - Python 3.4
pypyodbc.Programming Error: ('42000', '[42000]' [Miscrosoft] [SQL SERVER NATIVE CLIENT 10.0] [SQL SERVER] Must declare the table variable "@P1"
产生错误的代码是:
query = cursor.execute('''SELECT * FROM ?''', (table_variable,))
我还有其他的代码,我传递变量使用的正常工作(下面的代码按预期工作)的语法相同的SQL语句。
query = cursor.execute('''SELECT column_name FROM information_schema.columns WHERE table_name = ?''', (table_variable,))
当我使用变量传递表名称时,该错误似乎发生。
任何帮助解决这个错误将不胜感激。
您不能使用参数作为表名称。要做到这一点,需要动态的sql。 –
此限制仅限于表名或是否存在其他参数无法传递的实例(我还没有找到任何详细说明这些限制的文档)。 – DonnRK
参数旨在用于谓词来表示值。这意味着你可以在连接中使用它们,其中的子句等等。它们不是用来动态替换对象名称的。如果你想使用参数作为对象名称替换,你必须使用动态sql。如果沿着这条道路走,你不会从鲍比餐桌上出门,要小心。 http://bobby-tables.com/ –