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

在mysql sproc中使用变量作为表名

祁高格
2023-03-14
问题内容

我正在尝试将表名传递到我的mysql存储过程中,以使用此sproc从其他表中进行选择,但是它不起作用…

这是我正在尝试的:

CREATE PROCEDURE `usp_SelectFromTables`(
 IN TableName varchar(100)
)
BEGIN
        SELECT * FROM @TableName;
END

我也尝试过不带@符号,它只是告诉我TableName不存在…我知道:)


问题答案:

它取决于DBMS,但是这种表示法通常需要Dynamic
SQL,并且会遇到一个问题,即函数执行时的返回值取决于输入。这给系统带来了麻烦。作为一般规则(因此可能会有例外),DBMS不允许您将占位符(参数)用于查询的结构元素,例如表名或列名。它们仅允许您指定诸如列值之类的值。

某些DBMS确实具有存储过程支持,这将使您可以构建SQL字符串,然后使用“准备”或“立即执行”或类似操作对其进行处理。但是请注意,您突然容易受到SQL注入攻击的攻击-
可以执行您的过程的人可以部分控制执行SQL的方式。



 类似资料:
  • 问题内容: 我正在尝试执行此查询: 这将产生以下错误: Msg 1087,第16级,状态1,第5行 必须声明表变量“ @tablename”。 动态填充表名的正确方法是什么? 问题答案: 对于静态查询(如您的问题中的查询),表名和列名必须是静态的。 对于动态查询,应动态生成完整的SQL,并使用sp_executesql执行它。 这是一个脚本示例,用于比较不同数据库的相同表之间的数据: 静态查询:

  • 问题内容: 我在python中有此代码。 我将从这样的命令行运行此脚本 因此,我需要一种使len使用列表而不是变量的方法,我只想在var中给出列表的名称。 我知道在这个例子中我可以做 但是我的脚本上有13个列表,我需要一种方法,可以通过在命令行上输入的名称来引用它们。 问题答案: 尽管这在Python中是完全可能的,但不是必需的。最好的解决方案是不执行此操作,而是使用字典。 您会注意到脚本中有13

  • 问题内容: 意思是我想根据from的值动态离开联接表,因为从那里取了。 但是上面的查询结果 表table_name不存在 我的mysql限制错误? 问题答案: 表名和列名在SQL查询中不能是动态的。因此,您必须使用2个查询或存储过程以编程方式应用逻辑,请参见此处的示例:http : //forums.mysql.com/read.php?98,126506,126598#msg-126598

  • 问题内容: 我有一个分配了字符串的变量,我想根据该字符串定义一个新变量。 问题答案: 你可以使用exec:

  • 问题内容: 我有几个字段,每个字段都是这样的: 通过使用带有计数器的循环,我希望能够说出fieldx。其中x是该循环中计数器的值。这意味着如果我的数组中有6个条目,则将为fields1-field6提供值。 是否可以使用fieldx? 问题答案: 您可以使用反射来完成此操作,但是通常最好在数组中声明字段。代替: 你可以这样做: 然后,您可以遍历数组来设置值:

  • 问题内容: 我正在尝试用Python做某事,但我陷入了困境。我在Couchdb中有一个用户列表(使用python benchdb库和Flask框架),这些用户具有用户名(即_id)和电子邮件。我想在jinja2模板的选择框中使用电子邮件地址列表。 我的第一个问题是如何访问电子邮件地址。如果我做: 我得到: 这样我就可以获得我的电子邮件列表。但是我残酷的经验不足之处在于我不知道该如何使用它们。该列表