在MS Access 2003中使用SQL命令添加列时出错

时间:2012-12-28 07:23:28

标签: sql ms-access-2003

我想在我的EMP_2表格中添加一列。新的EMP_PCT列会将百分比存储为数字,例如20%20.0

我试图输入这个方法。但它在ALTER TABLE语句中给出了语法错误。

为什么不起作用?下面是我正在使用的SQL:

ALTER TABLE EMP_2
ADD EMP_PCT NUMBER(4,2);

4 个答案:

答案 0 :(得分:2)

访问DDL数据类型名称可能很难理清。 NUMBER实际上创建了一个双精度浮点字段。但是,如果在NUMBER之后尝试在括号中包含字段大小,精度或比例,则会出现语法错误。无论您是从ADO还是DAO执行它,以下语句都会创建一个双字段:

ALTER TABLE MyTable ADD COLUMN EMP_PCT NUMBER;

下一个语句将一个十进制数据类型列添加到MyTable,精度= 4且scale = 2,这意味着它将在小数点左侧保留最多2位数,在右侧保存2位数。 / p>

CurrentProject.Connection.Execute "ALTER TABLE MyTable ADD COLUMN EMP_PCT DECIMAL (4,2);"

我使用CurrentProject.Connection来执行DDL语句,因为它是一个ADO对象,而Access SQL只允许您使用ADO创建一个十进制字段。如果您尝试从DAO执行该语句,则会触发语法错误,例如CurrentDb.Execute或Access查询设计器。有关详细信息,请参阅Field type reference - names and values for DDL, DAO, and ADOX

正如@ErikE解释的那样,Access'十进制类型存在问题,特别是对于您正在使用的Access 2003。考虑您是否可以使用货币类型字段。由于db引擎处理固定小数位数的方式,它避免了十进制错误并提供更快的性能。

答案 1 :(得分:1)

首先,我建议您不要在Access 2003中使用Decimal数据类型,因为there are bugs with it围绕排序(错误的顺序)和聚合(总和截断小数部分)。在Access 2007中,聚合问题已解决,但不是排序(尽管您可以通过在列上添加索引来解决这个问题。)

至于你的剧本,有两个明显的问题:

  1. 您必须使用ADD COLUMN ColumnName而不是ADD ColumnName

  2. 正确的数据类型为DECIMAL,因为NUMBER会创建双精度浮点数,并且在指定任何类型的大小后不允许使用括号。 (也许 NUMERIC可以作为DECIMAL的同义词,但我不知道。)

  3. 所以这对你有用:

    ALTER TABLE EMP_2 ADD COLUMN EMP_PCT DECIMAL(4,2);
    

    根据HansUp和其他来源,这不能通过DAO提交(如CurrentDb.Execute中所述),但必须通过ADO(CurrentProject.Connection.Execute)完成。

    显然,有a way to get this SQL working但需要更改数据库设置:

      

    默认的Jet 4.0 mdb文件中不支持十进制数据类型。您必须使用SQL Server兼容性语法(ANSI 92)设置在SQL窗口中使用十进制数据类型。

         

    点击菜单,工具>选项。单击“表/查询”选项卡。在SQL Server兼容性语法(ANSI 92)部分中选中“此数据库”复选框。此模式将影响整个数据库,包括带有通配符的查询,因此您可能希望在数据库的副本上尝试此操作。

    如果仍然无法正常工作,可以考虑使用此方法(thanks to Philippe Grondier):

    Dim TD As DAO.TableDef
    Dim F As DAO.Field
    
    Set TD = CurrentDb.TableDefs("TableName")
    Set F = TD.CreateField("FieldName", dbDecimal, 4)
    F.DecimalPlaces = 2
    F.DefaultValue = 0
    
    TD.Fields.Append F
    

    供参考,以下是一些相关的Microsoft.com帮助页面:

答案 2 :(得分:0)

试试这个,

ALTER TABLE EMP_2 
ADD COLUMN EMP_PCT NUMBER(4,2);

或者尝试使用此网址

AddingFields

答案 3 :(得分:0)

试试这个

   ALTER TABLE EMP_2 ADD (EMP_PCT NUMBER (4,2));