1
  CREATE TABLE IF NOT EXISTS 'test'(
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `campaincode` VARCHAR( 100 ) NOT NULL ,
  `description` VARCHAR( 100 ) NOT NULL ,
  `paymentplantype` VARCHAR( 100 ) NOT NULL ,
  `contractlength` INT NOT NULL ,
  `monthlyannuityfactor` DOUBLE NOT NULL ,
  `initialfee` DOUBLE NOT NULL ,
  `notificationfee` DOUBLE NOT NULL ,
  `interestratepercentage` INT NOT NULL ,
  `interestfreemonths` INT NOT NULL ,
  `paymentfreemonths` INT NOT NULL ,
  `fromamount` DOUBLE NOT NULL ,
  `toamount` DOUBLE NOT NULL ,
  `timestamp` INT UNSIGNED NOT NULL ,
  `storeid` INT NOT NULL
  )
4

3 回答 3

1

您应该从表名中删除'字符,如下所示

 CREATE TABLE IF NOT EXISTS test(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`campaincode` VARCHAR( 100 ) NOT NULL ,
`description` VARCHAR( 100 ) NOT NULL ,
`paymentplantype` VARCHAR( 100 ) NOT NULL ,
`contractlength` INT NOT NULL ,
`monthlyannuityfactor` DOUBLE NOT NULL ,
`initialfee` DOUBLE NOT NULL ,
`notificationfee` DOUBLE NOT NULL ,
`interestratepercentage` INT NOT NULL ,
`interestfreemonths` INT NOT NULL ,
`paymentfreemonths` INT NOT NULL ,
`fromamount` DOUBLE NOT NULL ,
`toamount` DOUBLE NOT NULL ,
`timestamp` INT UNSIGNED NOT NULL ,
`storeid` INT NOT NULL
)

Sql 小提琴演示

于 2013-07-19T08:29:27.757 回答
0

表名有引号,它应该有反引号。试试这个:

 CREATE TABLE IF NOT EXISTS `test`(
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `campaincode` VARCHAR( 100 ) NOT NULL ,
  `description` VARCHAR( 100 ) NOT NULL ,
  `paymentplantype` VARCHAR( 100 ) NOT NULL ,
  `contractlength` INT NOT NULL ,
  `monthlyannuityfactor` DOUBLE NOT NULL ,
  `initialfee` DOUBLE NOT NULL ,
  `notificationfee` DOUBLE NOT NULL ,
  `interestratepercentage` INT NOT NULL ,
  `interestfreemonths` INT NOT NULL ,
  `paymentfreemonths` INT NOT NULL ,
  `fromamount` DOUBLE NOT NULL ,
  `toamount` DOUBLE NOT NULL ,
  `timestamp` INT UNSIGNED NOT NULL ,
  `storeid` INT NOT NULL
  ) 

一些有用的信息,应该总是使用反引号。但是有一些原因可能会导致团队不愿意使用它们。

好处:

  • 使用它们,没有保留字或禁止字符。
  • 在某些情况下,您会收到更具描述性的错误消息。
  • 如果您避免了您不在乎的不良做法,但是...实际上,有时它们是避免 SQL 注入的一种不错的方法。

缺点:

  • 它们不是标准的,通常不可移植。但是,只要您不使用反引号作为标识符的一部分(这是我能想象到的最糟糕的做法),您就可以通过自动删除反引号来移植您的查询。
  • 如果您的某些查询来自 Access,他们可能会用 " 引用表名(也许您不能盲目地删除所有 " )。但是,允许混合使用反引号和双引号。
  • 一些愚蠢的软件或功能会过滤您的查询,并且存在反引号问题。但是,它们是 ASCII 的一部分,因此这意味着您的软件/功能非常糟糕。

请参考:http ://dev.mysql.com/doc/refman/5.0/en/identifiers.html

于 2013-07-19T10:19:46.260 回答
-1

您的 SQL 存在一些问题

  1. 是您检查表是否存在的方式
  2. 您没有正确分配十进制数据类型
  3. 不需要将所有单词都包含在 '

下面是检查表是否存在的代码,如果我不存在创建它

/* CHECK IF THE TABLE EXISTS IN sys.objects*/
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = object_id(N'[dbo].[Table]') AND type in (N'U'))


BEGIN  -- If it dont create the table 
    CREATE TABLE [VI].[dbo].[Table] 
        (
             id INT NOT NULL identity(1,1) PRIMARY KEY 
             , campaincode VARCHAR( 100 ) NOT NULL 
             , [description] VARCHAR( 100 ) NOT NULL --if you want to use keywords that SQL uses like description it is best practise to wrap them in []
             , paymentplantype VARCHAR( 100 ) NOT NULL 
             , contractlength INT NOT NULL 
             , monthlyannuityfactor decimal(18, 0) NOT NULL -- when using decimal you must also type in the amount of numbers you want before the .(decimal place) and the amount you want after the decimal place 
                                                            -- i have set this to 18 before the . and 0 after this is the deafult when creating tables
             , initialfee decimal(18, 0) NOT NULL 
             , notificationfee decimal(18, 0) NOT NULL 
             , interestratepercentage INT NOT NULL 
             , interestfreemonths INT NOT NULL 
             , paymentfreemonths INT NOT NULL 
             , fromamount decimal(18, 0) NOT NULL 
             , toamount decimal(18, 0) NOT NULL 
             , [timestamp] INT NOT NULL 
             , storeid INT NOT NULL 
         )
END

如果您需要更多帮助,请给我留言,如果它回答了您的问题,请不要忘记将答案标记为完整

于 2013-07-19T08:43:05.640 回答