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
)
问问题
48 次
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
)
于 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 存在一些问题
- 是您检查表是否存在的方式
- 您没有正确分配十进制数据类型
- 不需要将所有单词都包含在 '
下面是检查表是否存在的代码,如果我不存在创建它
/* 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 回答