【问题标题】:SQL - Syntax error near ','SQL - ',' 附近的语法错误
【发布时间】:2012-09-14 04:13:57
【问题描述】:

无论我尝试使用哪个本地数据库(oracle、mysql、microsoft sql),我都无法弄清楚为什么这个查询不起作用。

INSERT INTO testtable
VALUES ( 'testvalue' , 12345678, 123.04, 0, '1950-01-03' )

例如,对于 Microsoft SQL Server,我在“,”附近出现错误。

有了 MySQL,我得到了

第 2 行的“12345678, 123.04, 0, )”附近的 SQL 语法有错误。

我尝试过使用它,我查看了 W3 学校的 INSERT INTO 语法。一切看起来都很好。会是什么?

谢谢!

编辑:

根据要求:这是 mysql 的布局

+------------+--------------+------+-----+-------- -+--------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +------------+--------------+------+-----+-------- -+--------+ |测试字符串 | varchar(600) |否 | |空 | | |测试整数 |整数(11) |否 | |空 | | |测试双 |双 |否 | |空 | | |测试布尔 |小整数(1) |否 | |空 | | |测试日期 |日期 |否 | |空 | | +------------+--------------+------+-----+-------- -+--------+

另外,应该注意的是,我可以使用这些值运行参数化查询,它会正常工作。只有当我手动创建查询时才会出现问题。

【问题讨论】:

  • 表的结构是什么?
  • '12345678, 123.04, 0, )''1950-01-03' 在哪里?
  • 能否打印查询“DESCRIBE testtable;”的结果?在 mysql 中?
  • 你是在客户端代码中动态构造语句吗?
  • 还有问题吗?

标签: mysql sql sql-server insert


【解决方案1】:

您的架构或语法没有任何问题,正如您从 SQL Fiddle 中看到的那样。

我的猜测是您一次运行多个语句并且没有正确分隔每个语句。例如:

INSERT INTO testtable
VALUES ( 'testvalue' , 12345678, 123.04, 0, '1950-01-03' )

INSERT INTO testtable
VALUES ( 'testvalue' , 12345678, 123.04, 0, '1950-01-03' )

会导致错误。然而:

INSERT INTO testtable
VALUES ( 'testvalue' , 12345678, 123.04, 0, '1950-01-03' ); --End statement with ;

INSERT INTO testtable
VALUES ( 'testvalue' , 12345678, 123.04, 0, '1950-01-03' );

...运行良好。您也可能在某个地方有一个未关闭的杂散开引号,导致您的部分语句成为另一个字符串常量的结尾部分。验证准确您正在运行的内容,因为您发布的代码将按原样正常运行。

【讨论】:

  • 这就是我认为正在发生的事情。在第一个字符串的结尾和第二个字符串的开头之间出现了一些问题。但是,我无法弄清楚如何。或者为什么。
【解决方案2】:

值的格式取决于你的列的数据类型,但另一方面总是用' 包装你的值,除了 int dataType

试试

INSERT INTO testtable
VALUES ( 'testvalue' , '12345678', '123.04', '0', '1950-01-03' );

【讨论】:

  • 当我这样做时,我得到了同样的错误,但这次 '(,,,') 是错误消息的详细信息。
  • 检查你的表列名前后是否有空格。
【解决方案3】:
INSERT INTO testtable(column1,column2,column3,column4,column5) 
VALUES ( 'testvalue' , 12345678, 123.04, 0, '1950-01-03' )

【讨论】:

    【解决方案4】:
    INSERT INTO testtable (TestString,TestInt,TestDouble,Testbool,TestDate ) 
    VALUES ( 'testvalue' , '12345678', '123.04', '0', '1950-01-03' )
    

    试试这个...

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2016-03-12
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多