1

準備ステートメントを使用してテーブルを作成しようとしていますが、構文エラーが発生しています。同じステートメントを個別に実行しようとすると、うまくいきます。

これが私の声明です -

SET @Stmt1 = Concat('DROP TABLE IF EXISTS ',DB,'.`county`;\n'
'CREATE TABLE IF NOT EXISTS ',DB,'.`County`
(
  `CountyID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `CountyName` VARCHAR(45) NOT NULL,
  `CountyCode` VARCHAR(30) NOT NULL,
   PRIMARY KEY (`CountyID`)
)');

Prepare stmt2 From @stmt1;
Execute stmt2;

この声明で何が欠けているのか誰か教えてください。この行でエラーが発生しています:

'CREATE TABLE IF NOT EXISTS ',DB,'.`County`
(
  `CountyID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
4

2 に答える 2

3

http://dev.mysql.com/doc/refman/5.1/en/prepare.htmlによると:

[準備可能なステートメントの]テキストは、複数のステートメントではなく、単一のSQLステートメントを表す必要があります。

したがって、最初にステートメントを実行してから、ステートメントを個別DROP TABLEに準備して実行する必要があります。CREATE TABLE

于 2009-05-30T16:44:39.770 に答える
0

concat の 2 つの文字列の間にカンマがありませんか?

する必要があります

SET @Stmt1 = Concat('DROP TABLE IF EXISTS ',DB,'.county;\n', 'CREATE TABLE IF NOT EXISTS ',DB,'.County ( CountyID INT UNSIGNED NOT NULL AUTO_INCREMENT, CountyName VARCHAR(45) NOT NULL, CountyCode VARCHAR(30) NOT NULL, PRIMARY KEY (CountyID) )');
于 2009-05-30T09:13:17.517 に答える