[英]Error adding column using SQL command in MS Access 2003
我想在我的EMP_2
表中添加一列。 新的EMP_PCT
列将存储百分比作为数字,例如20%
作为20.0
。
我试着输入这个方法。 但它在ALTER TABLE
语句中给出了语法错误。
为什么不起作用? 下面是我正在使用的SQL:
ALTER TABLE EMP_2
ADD EMP_PCT NUMBER(4,2);
访问DDL数据类型名称可能很难理清。 NUMBER
实际上创建了一个双精度浮点字段。 但是,如果在NUMBER
之后尝试在括号中包括字段大小,精度或比例,则会出现语法错误。 无论您是从ADO还是DAO执行,以下语句都会创建一个双字段:
ALTER TABLE MyTable ADD COLUMN EMP_PCT NUMBER;
下一个语句将一个十进制数据类型列添加到MyTable
其中precision = 4,scale = 2,这意味着它将在小数点左边保留最多2位数,在右边保存2。
CurrentProject.Connection.Execute "ALTER TABLE MyTable ADD COLUMN EMP_PCT DECIMAL (4,2);"
我使用CurrentProject.Connection
来执行DDL语句,因为它是一个ADO对象,而Access SQL只允许您使用ADO创建一个十进制字段。 如果您尝试从DAO执行该语句,则该语句将触发语法错误,如使用CurrentDb.Execute
或从Access查询设计器执行。 有关详细信息,请参阅字段类型引用 - DDL,DAO和ADOX的名称和值 。
正如@ErikE解释的那样,Access'十进制类型存在问题,特别是对于您正在使用的Access 2003。 考虑您是否可以使用货币类型字段。 由于db引擎处理固定小数位数的方式,它避免了十进制错误并提供更快的性能。
首先,我建议你不要在Access 2003中使用Decimal
数据类型,因为它有关于排序(错误的顺序)和聚合(总和截断小数部分)的错误。 在Access 2007中,聚合问题已解决,但不是排序(尽管您可以通过在列上放置索引来解决这个问题)。
至于你的脚本,有两个明显的问题:
您必须使用ADD COLUMN ColumnName
而不是ADD ColumnName
正确的数据类型是DECIMAL
,因为NUMBER
会创建一个双精度浮点数,并且在指定任何类型的大小后不允许使用括号。 ( 也许 NUMERIC
可以作为DECIMAL
的同义词,但我不知道。)
所以这对你有用:
ALTER TABLE EMP_2 ADD COLUMN EMP_PCT DECIMAL(4,2);
根据HansUp和其他消息来源,这不能通过DAO提交(如在CurrentDb.Execute
),但必须通过ADO( CurrentProject.Connection.Execute
)完成。
显然,有一种方法可以使这个SQL工作,但它需要更改数据库设置:
默认的Jet 4.0 mdb文件不支持十进制数据类型。 您必须使用SQL Server兼容性语法(ANSI 92)设置在SQL窗口中使用十进制数据类型。
单击菜单,工具>选项。 单击“表/查询”选项卡。 在SQL Server兼容性语法(ANSI 92)部分中选中“此数据库”复选框。 此模式将影响整个数据库,包括带有通配符的查询,因此您可能希望在数据库的副本上尝试此操作。
如果你仍然无法正常工作,你可以考虑这种方法( 感谢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帮助页面:
试试这个
ALTER TABLE EMP_2 ADD (EMP_PCT NUMBER (4,2));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.