在访问表中,我有一个"Required"属性设置为"True"的列.我需要一个查询,将其更改为"False".我尝试了以下但没有成功:
ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30) NULL;
Run Code Online (Sandbox Code Playgroud)
Access(Jet/ACE)DDL允许您将字段的Required属性从False 更改为True.以下是Access Immediate窗口中的示例:
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
False
CurrentDb.Execute "ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30) NOT NULL;"
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
Run Code Online (Sandbox Code Playgroud)
但是,你想要相反的--- Required从True变为False.访问DDL不会这样做.在此示例中,应用了请求的字段大小,但该Required属性未更改.并且Access不会抛出错误:
CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required = True
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Size
10
CurrentDb.Execute "ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30) NULL;"
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Size
30
Run Code Online (Sandbox Code Playgroud)
如果在DDL语句中排除任何Null的提及,Required仍然保持不变:
CurrentDb.Execute "ALTER TABLE [MyTbl] ALTER COLUMN [MyCol] VARCHAR(30);"
? CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required
True
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以使用Access DDL和DML的混合作为@tschaible和@hawbsl演示.然而,这种方法对我来说似乎太费劲了.我更喜欢@Caltor建议的方法.如果这对你来说很实用,它甚至可能就这么简单......
CurrentDb.TableDefs("MyTbl").Fields("MyCol").Required = False
Run Code Online (Sandbox Code Playgroud)
Jet SQL,Access中的底层SQL引擎不允许您修改列上的null属性.这样做的工作是: