【问题标题】:How to add a 'Boolean' column to ms-access via SQL in vb.net如何通过 vb.net 中的 SQL 将“布尔”列添加到 ms-access
【发布时间】:2012-11-16 08:08:09
【问题描述】:

我正在尝试使用 SQL 将 Boolean 列添加到 ms-access 中的表中。我正在使用 JET,这是我尝试过的 SQL 查询。

Query = "ALTER TABLE tabDatafiveMinutely ADD CON0001 BOOLEAN DEFAULT FALSE"
Query = "ALTER TABLE tabDatafiveMinutely ADD CON0001 BOOLEAN"

我得到的错误是“字段定义中的语法错误”

感谢您的帮助

编辑:

我现在想设置默认的null 而不是false。我试过default null,这仍然给我false,有人可以帮忙吗?

结果:

ms-access 数据库只能采用 truefalse 且不能为空。因此我决定改用 and integer

【问题讨论】:

  • "我现在想将默认设置设为 null 而不是 false。" 这是不可能的。 Access YesNo 字段将只接受 True 或 False,绝不接受 Null。所以你不能让它默认为一个它不能保存的值。
  • 我相信我已经用this 回答了我的编辑。谢谢汉斯

标签: sql vb.net ms-access


【解决方案1】:

Yes/No 列的等效 SQL 类型是 BIT

ALTER TABLE tabDatafiveMinutely
    ADD COLUMN CON0001 BIT   DEFAULT 0   NOT NULL

Microsoft's documentation

注意
DEFAULT 语句只能通过 Jet OLE DB 提供程序和 ADO 执行。如果通过 Access SQL View 用户界面使用,它将返回错误消息。


正如@Pere 指出的那样,Jet Engine(Access 的查询引擎)不会将 DEFAULT 值应用于现有行。更改表后必须运行 UPDATE 语句。

UPDATE tabDatafiveMinutely SET CON0001 = 0 WHERE CON0001 IS NULL

【讨论】:

  • 感谢您的指出。在花了几个小时之后,我终于意识到 PHP 中为 ALTER TABLE 中的列设置默认值的唯一编程方式是使用 COM 对象通过 OLEDB。
  • 哦,顺便说一句。如果通过 Access 中的 SQL 窗口执行上述语句,请非常小心(尚未尝试通过 ADO,但我怀疑它会以相同的方式执行):我刚刚发现,对于现有行,它不会应用如果您将其设置为true,则为默认提供的值。不过,新的会。再次感谢女士!
  • 是的,Jet 引擎(Access' 查询引擎)不会将 DEFAULT 值应用于现有行。更改表后必须运行 UPDATE 语句。 UPDATE tabDatafiveMinutely SET CON0001 = 0 WHERE CON0001 IS NULL
【解决方案2】:

您应该使用 BIT 数据类型而不是 BOOLEAN。

Access data types.

【讨论】:

    【解决方案3】:

    我不确定您从哪里阅读语法,但您需要更好的来源。

    ALTER TABLE tabDatafiveMinutely
    ADD COLUMN CON0001 <datatype>
    

    对于布尔类型,我认为您需要从 BIT、INTEGER 或 CHAR(1) 中进行选择。它取决于应用程序。例如,遗留系统经常在 CHAR(1) 列中使用“t”和“f”。

    【讨论】:

    • 查询适用于BIT或其他有效数据类型,不需要COLUMN
    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2020-08-24
    • 2013-01-06
    • 1970-01-01
    • 2012-09-24
    相关资源
    最近更新 更多