不允许在现有数据中使用空值字段

3091
14
04-13-2021上午10:35
AlexP_
通过
定期撰稿人

你好,

我有arcigis pro 2.7.2, arcmap 10.7.1,现有的sde特性类,sql server。

是否有一种方法来禁止空值字段设置,因为它有现有的数据?需要有一个必须输入的字段。它没有注册为版本。请建议。谢谢你!

亚历克斯

标签(3)
0荣誉
14日回复
DanPatterson
通过 尊敬的贡献者
尊敬的贡献者

对于文件地理数据库,我只发现禁止空值只能在字段创建时执行。

我完全不允许将null作为默认值,但一旦允许,我还没有找到恢复它的方法。

之前关于这个话题的一篇文章

解决方案在表- Esri社区188金宝博复式188金宝搏网址导航


...有点退休了…
JohannesLindner
常规赛MVP

如果你不需要在ArcMap中使用有问题的表(尽管你已经列出了ArcMap…),你可以定义约束属性规则。

https://pro.arcgis.com/de/pro-app/latest/help/data/geodatabases/overview/an-overview-of-attribute-ru..。

//触发:Insert, Update //如果NotNullable字段为空,则阻塞编辑if(IsEmpty($feature.NotNullable)) {return False} return True //或在一行中:// return !

您将无法在ArcMap中打开这些表。不过,您可以打开包含数据的视图。所以如果你不做ArcMap编辑,这可能是一个解决方案…


祝你有愉快的一天!
约翰内斯
AlexP_
通过
定期撰稿人

@JohannesLindner谢谢你提供的信息。但它需要编辑。当编辑器输入信息时,需要输入一个字段。

0荣誉
JohannesLindner
常规赛MVP

只要表中有条目,就不能将字段更改为不允许空值。

  1. 删除表所属的所有关系类
  2. 复制你的表格
  3. 删除表中的所有行
  4. 改变你的字段(s),你现在可以不允许空值
  5. 编辑副本中的空字段值(或在原始文件的第1步之前执行)
  6. 将副本中的所有行复制到原始文件中
  7. 删除副本
  8. 重新创建所有已删除的关系类

! !这将改变表的ObjectID和GlobalID值!!


祝你有愉快的一天!
约翰内斯
VinceAngelo
通过 Esri尊敬的贡献者
Esri尊敬的贡献者

如果表没有版本控制,你可以使用SQL来修改列:

ALTER TABLE [{tablename}] ALTER COLUMN [{columnname}] {datatype} NOT NULL

然后,您应该以表所有者的身份在Catalog视图中打开表,以确保属性是正确的,并将更新填充到侧。sde_column_registry表。

- - - - - - V

0荣誉
AlexP_
通过
定期撰稿人

@VinceAngelo谢谢你提供的信息。请看截图。我答错了。

味精102,15层,状态1,1线
'{'附近的语法不正确。

alexp__0 - 1618514016276. - png

0荣誉
VinceAngelo
通过 Esri尊敬的贡献者
Esri尊敬的贡献者

“{tablename}”、“{columnname}”和“{datatype}”需要替换为实际值,例如:

ALTER TABLE [EDIT_TEST] ALTER COLUMN [TEST] nvarchar({actualwidth}) NOT NULL


(是的,您需要将"{actualwidth}"替换为已定义的列宽度)。

- - - - - - V

AlexP_
通过
定期撰稿人

@VinceAngelo我又收到一条错误信息。请建议。

Msg 515, 16层,状态2,1线
不能将NULL值插入到列'TEST',表'EDIT_TEST';列不允许为空。更新失败。
声明已终止。

0荣誉
VinceAngelo
通过 Esri尊敬的贡献者
Esri尊敬的贡献者

如果表中没有NULL值,则只能对该列强制执行NOT NULL。

你需要先解决这个问题。

- - - - - - V

0荣誉