SQL 过程 CREATE Table 变量 Tablename
SQL Procedure CREATE Table with variable Tablename
我需要用变量名创建 table。
这是我的代码,我不知道为什么它不起作用。
BEGIN
SET @tablename = tablename;
SET @sql_text = concat('CREATE TABLE ',@tablename,' (ID INT(11) NOT NULL, team0 DOUBLE NOT NULL, team1 DOUBLE NOT NULL)');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
这里是错误:
Procedure execution failed
1054 - Unknown column 'TestTableName' in 'field list'
用 '
包裹 tablename
以表明它是字符串文字而不是标识符。
BEGIN
SET @tablename = 'tablename';
SET @sql_text = concat('CREATE TABLE ',@tablename,' (ID INT(11) NOT NULL, team0 DOUBLE NOT NULL, team1 DOUBLE NOT NULL)');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
请阅读 CREATE TABLE @tbl 因为在运行时创建表可能表明设计不佳。
BEGIN
SET @tablename = 'tablename';
SET @sql_text = concat('CREATE TABLE ',@tablename,' (ID INT(11) NOT NULL, team0 DOUBLE NOT NULL, team1 DOUBLE NOT NULL)');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
显然问题出在 table 名称本身和缺少引号(正如其他人所指出的)。编写此类代码时,您可以考虑使用 replace()
而不是 concat()
。这使您可以:
BEGIN
SET @tablename = 'tablename';
SET @sql_text = '
CREATE TABLE @tablename (
ID INT(11) NOT NULL,
team0 DOUBLE NOT NULL,
team1 DOUBLE NOT NULL
)';
REPLACE(@sql_text, '@tablename', @tablename);
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
我发现这种方法更容易调试和维护。
我需要用变量名创建 table。
这是我的代码,我不知道为什么它不起作用。
BEGIN
SET @tablename = tablename;
SET @sql_text = concat('CREATE TABLE ',@tablename,' (ID INT(11) NOT NULL, team0 DOUBLE NOT NULL, team1 DOUBLE NOT NULL)');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
这里是错误:
Procedure execution failed
1054 - Unknown column 'TestTableName' in 'field list'
用 '
包裹 tablename
以表明它是字符串文字而不是标识符。
BEGIN
SET @tablename = 'tablename';
SET @sql_text = concat('CREATE TABLE ',@tablename,' (ID INT(11) NOT NULL, team0 DOUBLE NOT NULL, team1 DOUBLE NOT NULL)');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
请阅读 CREATE TABLE @tbl 因为在运行时创建表可能表明设计不佳。
BEGIN
SET @tablename = 'tablename';
SET @sql_text = concat('CREATE TABLE ',@tablename,' (ID INT(11) NOT NULL, team0 DOUBLE NOT NULL, team1 DOUBLE NOT NULL)');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
显然问题出在 table 名称本身和缺少引号(正如其他人所指出的)。编写此类代码时,您可以考虑使用 replace()
而不是 concat()
。这使您可以:
BEGIN
SET @tablename = 'tablename';
SET @sql_text = '
CREATE TABLE @tablename (
ID INT(11) NOT NULL,
team0 DOUBLE NOT NULL,
team1 DOUBLE NOT NULL
)';
REPLACE(@sql_text, '@tablename', @tablename);
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
我发现这种方法更容易调试和维护。