使用 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 命名空间时如何解决语法错误?