0

在 MySQL 中,我正在检索一个column_typefrom ,information_schema.columns然后想要生成一个到. 但是,对于什么是数据类型,两者似乎都有自己的想法。例如,我经常从信息模式中接收、和,并且想要从本质上执行,但它说这是一个语法错误。SELECTCASTscolumn_typeCASTCONVERTVARCHAR(64)TEXTINT(10) UNSIGNEDCONVERT(`Table`.`Column`, INT(10) UNSIGNED)

我需要将其编写为CONVERT(`Table`.`Column`, UNSIGNED),但在这种情况下,我将需要编写代码来解析每个可能的响应column_type并将其转换为CAST等效的,即使那样也不能保证生成我需要的代码:如果我正在使用 BIGINT 并试图将其塞入 INT 中怎么办?有没有办法对用于定义表的实际列类型执行强制转换?

4

1 回答 1

0

因此,您想通过使用来自另一个 SQL 语句的值来创建一个 SQL 语句。

这称为“动态 SQL”,在 MySQL 中,这只能通过在存储过程中创建准备好的语句来实现。此外,只能从用户变量创建准备好的语句。

所以你最终会得到这样的东西:

CREATE PROCEDURE ...() BEGIN
  DECLARE desired_type VARCHAR(255);
  SELECT column_type FROM information_schema.columns ... INTO desired_type;
  SET @your_dynamic_sql = CONCAT("UPDATE ... SET ... = CONVERT(..., ", desired_type, ");");
  PREPARE update_statement FROM @your_dynamic_sql;
  EXECUTE update_statement;
END
于 2012-06-16T01:03:30.777 回答