使用 DEFAULT 值和 OleDB 时如何终止 SQL 语句?

Posted

技术标签:

【中文标题】使用 DEFAULT 值和 OleDB 时如何终止 SQL 语句?【英文标题】:How to terminate SQL statements when using DEFAULT value and OleDB? 【发布时间】:2021-08-20 17:51:07 【问题描述】:

使用 C# 和 JET OleDB 驱动程序 (Microsoft.Jet.OLEDB.4.0) 连接到旧的 Access 数据库(想想 Access 97)。以下 SQL 语句工作正常:

ALTER TABLE [MyTable] ADD [FunkyInt] Integer DEFAULT 3
ALTER TABLE [MyTable] ADD [FunkyString] Text(30) DEFAULT hello

但是用分号 (;) 终止语句会导致问题:

ALTER TABLE [MyTable] ADD [FunkyInt] Integer DEFAULT 3;  -- syntax error
ALTER TABLE [MyTable] ADD [FunkyString] Text(30) DEFAULT hello; -- default is now "hello;"

DEFAULT 的 SQL 语句可以终止吗?

【问题讨论】:

必须将这些语句作为两个独立的操作分开运行。 如果我在分号前插入一个空格,那么在 Access 应用程序会话中从 CurrentProject.Connection 执行时,最后两条语句都可以正常工作。但这对我来说似乎很奇怪。 我使用的是 VBA,而不是 C# 和 Access 2010。尝试过,但失败了。但是为什么有两个 ALTER 语句呢?一个 ALTER 操作可以添加多个字段。 【参考方案1】:

可以(并且可能应该)使用双引号将默认值引用以避免这些错误,其中包括:

ALTER TABLE [MyTable] ADD [FunkyInt] Integer DEFAULT "3";  
ALTER TABLE [MyTable] ADD [FunkyString] Text(30) DEFAULT "hello"; 

请注意,Access 不支持一次执行多个语句,因此确实没有理由终止语句。它们在最后自动终止。

或者,在文字后添加一个尾随空格。 DEFAULT 子句后跟一个文字,它要么用引号括起来并以右引号结尾,要么以后面的空格结尾。

ALTER TABLE [MyTable] ADD [FunkyInt] Integer DEFAULT 3 ; 

【讨论】:

实际上,数字类型字段的值不要用引号引起来。 @June7 为什么不呢? DEFAULT 遵循文字规则,而不是表达式规则,因此您不会将字符串设置为默认值。试试看,你会看到它工作正常(只要通过 OLEDB 连接或在 ANSI 兼容模式下执行,所以CurrentProject.Connection.Execute "ALTER etc。)你也可以在将不带引号的 1+3 设置为文本的默认值时看到这一点字段,则使用该文字文本,而当您在查询中使用它时,它是一个加法和一个数字。 我确实尝试过(但使用撇号)并最终在数字字段的属性中默认为 '3'。然后我在没有撇号的情况下进行了测试,默认只是3 @June7 这些是错误的引号。只有双引号适用于文字。我已经编辑了答案,使其更加明确并提供更多上下文。 用嵌入的双引号测试,结果是"3"。再次。无需嵌入引号或撇号即可工作。根本无法使用 DEFAULT 获取查询对象。

以上是关于使用 DEFAULT 值和 OleDB 时如何终止 SQL 语句?的主要内容,如果未能解决你的问题,请参考以下文章

修改字段默认值和属性

使用此 INSERT INTO 语句和 .NET OleDb 命名空间时如何解决语法错误?

sql的基本用法-------修改字段默认值和属性

SQL SSAS - 部署错误

Linux Config: 如何终止ubuntu report system problem detect

用OleDB读写Excel时,日期"字段"如何操作?