当前位置: 首页 > 知识库问答 >
问题:

在没有dynmaic SQL的表名中使用变量

郭思淼
2023-03-14

下面是我想做的一个例子:

declare variables
Set @Table1 = 'WhatsOn_20141208'

-- drop and re-create table
drop table if exists @Table1;
CREATE TABLE @Table1 (
rac_account_no  varchar(100),
addressLine2    varchar(100)
);

-- load data into table
LOAD DATA LOCAL INFILE 'C:/Example.txt' 
INTO TABLE @Table1
FIELDS TERMINATED BY '|' 
ENCLOSED BY '"' LINES TERMINATED BY '\n'
IGNORE 1 LINES;

-- update addressLine2 column
Update @Table1
set addressLine2 = REPLACE(addressLine2,"*UNKNOWN*","");

如果表名更改了,我希望能够在变量中更改一次,而不是对所有出现的情况进行查找和替换。

到目前为止,我找到的唯一解决方案是使用动态SQL并将字符串串联起来,如下例所示:

SET @s = CONCAT('select * from ', @Cat, ' where ID = ', @ID_1); 

PREPARE stmt1 FROM @s; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1; 

共有1个答案

何兴学
2023-03-14

您问,在不使用动态SQL和concat方法的情况下,如何在SQL查询中使用变量?

对不起,你不能。动态SQL是在MySQL中实现的方式。

这适用于模式、表和列的名称(即数据字典名称),而不适用于值。

 SELECT xxx FROM yyy WHERE zzz
 SELECT id,name,value FROM transaction WHERE id=?

然后,他们继续为数据值使用绑定变量。

MySQL prepared语句只是在MySQL服务器内部而不是在主机语言中完成这种工作的一种方式。但是(在我看来)准备好的语句很难进行单元测试和故障排除,因此使用宿主语言来实现这一点是更有效的软件工程。

当应用程序的数据源不受信任时会有一点危险,因此检查每个输入的有效性是很重要的。

 类似资料:
  • 问题内容: 当我尝试在数据库中放置新条目时,出现错误和下面显示的错误。我已经搜索了好几个小时,但无法检测到出了什么问题。任何输入都是极好的! 这是 LogCat 的 错误 。 我的 数据库文件 。 然后是我的 AddNewDay文件 。 这就是我在数据库中添加新条目的方式。 问题答案: 所以基本上我找到了解决方案。我仍然对它的愚蠢感到困惑。显然,数据库工作是我的超敏感材料!我的问题是我忘记了最后一

  • 问题内容: 我正在尝试将表名传递到我的mysql存储过程中,以使用此sproc从其他表中进行选择,但是它不起作用… 这是我正在尝试的: 我也尝试过不带@符号,它只是告诉我TableName不存在…我知道:) 问题答案: 它取决于DBMS,但是这种表示法通常需要Dynamic SQL,并且会遇到一个问题,即函数执行时的返回值取决于输入。这给系统带来了麻烦。作为一般规则(因此可能会有例外),DBMS不

  • 方法是否可能返回“object”?谢谢

  • 我有一个命名的数据帧列表。我需要用数据帧的名称为每个数据帧创建一个新变量,这样我最终就可以将它们全部rbind起来,以生成统计数据和绘图。 我知道lapply不会传递对象的名称,也知道有很多类似问题的帖子,但我无法将我看到的任何解决方案适用于我的特定问题。 这是我第一次尝试的方法,但显然不起作用,因为names(x)不会返回对象的名称。 TestList<-list(a=data.frame(Va

  • 问题内容: 如何使用列表中的名称创建新变量?这个: 当然不行。我该怎么办? 我想做这个: 问题答案: 我认为更适合此目的: 但是,如果您仍然想即时创建变量,则可以使用:

  • 我想使用在数据帧中创建多个新列。列名及其内容应动态生成。 来自IRIS的示例数据: 我创建了一个函数来从变量中更改新列: