【发布时间】:2014-12-11 02:12:24
【问题描述】:
如何不使用动态 SQL 和 concat 方法在 SQL 查询中使用变量?
我希望能够在脚本开头声明变量,然后在整个脚本中使用它们(例如表名)
这是我想做的一个例子:
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;
有没有更简单的方法?
干杯, 卢卡斯
【问题讨论】:
-
你不能,你必须使用
dynamic sql这个...... -
您可以在配置文件中使用表名,在 .sql 文件中使用宏表名,使用 python 程序读取配置文件并修改 sql 文件并将修改后的 sql 用于你的目的。
-
一个数据库结构,其中您有多个具有相同列的表,这通常是数据库出现问题的迹象。很少有任何理由拥有多个相同的表。您可能应该重新审视您的数据库设计。
-
嘿,戈登,我刚刚随机挑选了一段代码来说明我想要做什么。不要过多地阅读该特定示例。听起来无论如何都不可能。