"拿到一份数据,第一反应不是看图形画得漂不漂亮,而是先把属性表打开,看看里面到底装了什么。"这是我这几年带新人时反复念叨的一句话。ArcGIS 里的属性表操作听起来是最没技术含量的一块——无非就是加字段、算个数、连个表、筛几条记录——但真正在项目里滚过几轮的人都清楚,属性表才是 GIS 数据的骨架,图形只是皮。骨架搭歪了,后面的裁剪、拓扑检查、出图标注、统计汇总会一个接一个地出问题,而且往往在项目交付前一晚才暴露出来。
这篇内容我把属性表操作从底层概念到实际手感完整过一遍:字段类型怎么选、字段计算器为什么总出事故、按属性选择的 SQL 表达式怎么写才不报错、连接与关联到底差在哪、以及那些只有踩过坑才知道的细节。不管你是刚开始接触 ArcGIS 的学生,还是天天跟地块、管网、图斑打交道的从业者,这里面的东西应该都能直接拿走用。
1. 属性表到底是什么:先把OID、字段、记录这三件事捋顺
很多人学 ArcGIS 的第一课是画点、画线、画面,属性表往往被当成"附带的东西"。但换个角度想:一个面要素如果不带属性,它只是一堆坐标围成的圈;带上地类、面积、权属、编号之后,它才变成一条可以被管理、被统计、被追溯的数据。所以属性表不是图形的附属品,两者是同一个要素的两个面。
1.1 属性表、要素类与记录:三个概念别混着用
打开一张属性表,你会看到行和列。行在 GIS 里叫记录(Record),一条记录对应地图上的一个要素;列叫字段(Field),存的是这个要素某一方面的信息。而整套结构放在一起,就叫要素类(Feature Class)或者独立表(Standalone Table)。地图上选中一个面,属性表里对应那一行会高亮,反过来也一样——这个联动关系是后面所有操作的基础。
另外有一个东西必须单独拎出来讲,就是OID(ObjectID)。它是系统自动生成、自动维护的唯一标识,你改不了值,也删不掉。它的作用是让软件能精确指认"我说的就是这一条记录"。Shapefile 里这个东西叫FID,本质一样,但管理方式不同——FID 是可以被重排的,比如你用排序工具导出一次,FID 就从 0 开始重新排一遍。这个差别在跟外部数据做连接的时候特别致命,后面第 6 节会细说。
提示:做数据核对时不要拿 OID 当业务编号用。OID 会随导出、复制、转换而变,业务编号应该是你自己建的一个文本字段,不受软件摆布。
1.2 字段类型体系:八种类型各自的脾气
字段类型选错,是属性表操作里最隐蔽的一类错误。表面上数据都能存进去,但到统计、计算、导出的时候就会各种别扭。常见的类型和它们的适用场景我整理成了下面这张表,实际建字段之前扫一眼能省很多事。
| 字段类型 | 存储范围/形式 | 典型用途 | 容易踩的坑 |
|---|---|---|---|
| 短整型(Short Integer) | -32768 ~ 32767 | 等级、序号、分类码 | 存超过 32767 的值会溢出报错 |
| 长整型(Long Integer) | 约 ±21 亿 | 大编号、人口数 | 仍存不下超长编号,需用文本 |
| 浮点型(Float) | 单精度,约 7 位有效数字 | 一般量测值 | 精度不够,面积计算别用 |
| 双精度(Double) | 双精度,约 15 位有效数字 | 面积、长度、坐标 | 显示小数位和实际存储是两回事 |
| 文本(Text) | 定长字符串 | 名称、编号、备注 | 长度设小了后面改很麻烦 |
| 日期(Date) | 日期+时间 | 调查时间、更新日期 | 格式随系统区域设置变化 |
| BLOB | 二进制大对象 | 存图片、附件 | 只能通过专门接口读写 |
| GUID | 全局唯一标识 | 跨库同步的稳定主键 | 肉眼不可读,人看不方便 |
面积、长度这类的值我一般直接上双精度。理由很实际:同样一个地块,用浮点存出来面积可能是 1234.567,用双精度是 1234.5678,看着只差一点,但如果要汇总一万个地块,误差会累积到几十平方米,报给甲方的时候是要被追问的。
文本字段的长度也要认真估。文件地理数据库里文本字段上限是 2147483647,看起来随便设,但设成 500 就会让整个表体积膨胀;Shapefile 的文本字段上限只有 254,而且字段名最多 10 个字符,这两个限制经常在数据转换的时候给人当头一棒。
1.3 Shapefile 和文件地理数据库在属性表上的差异
这是新手最容易忽略的一块。同样一张属性表,底层的存储格式不同,行为完全不同。我在下面把差异列清楚,你在做数据转换之前最好对一遍。
| 对比项 | Shapefile(.dbf) | 文件地理数据库 |
|---|---|---|
| 字段名长度上限 | 10 个字符 | 64 个字符 |
| 文本字段长度上限 | 254 个字符 | 非常大 |
| 中文字段名 | 不推荐,易乱码 | 支持(建议用别名) |
| 字段类型数量 | 少,无 GUID 等 | 完整 |
| 是否支持属性域、子类型 | 不支持 | 支持 |
| 字段删除 | 可以,但会重写整个 dbf | 可以 |
| 空值处理 | 空字符串和 NULL 混在一起 | 有明确的 NULL |
我自己的习惯是:中间过程一律在文件地理数据库里做,最后要交付给别人的时候再转成需要的格式。反过来,别人给的 Shapefile 我第一步一定是导入地理数据库再动它,避免在 10 字符字段名和 254 字符长度上反复吃瘪。
2. 打开和浏览属性表:那些没人告诉你但天天要用的细节
属性表的浏览功能看起来简陋,其实藏了不少东西。天天跟几万行数据打交道的人,如果能把这些细节用顺手,效率差别是很明显的。
2.1 四种打开入口,用对了能省不少事
打开属性表的路径不止一条,不同场景下用不同入口会更快:
- 在内容列表里右键图层,选"打开属性表",这是最常用的。
- 用快捷键。选中图层后按
Ctrl + T,表格直接弹出来,不用在菜单里找。 - 从选择结果打开。先用选择工具在地图上框一批要素,再打开属性表,表格默认只显示被选中的记录,核对数据非常方便。
- 从其他工具的右键菜单打开。比如"按属性选择"对话框里就有"打开属性表"这类联动入口。
真正提高效率的是第二条。我以前都是右键菜单一层层点,后来改成Ctrl + T,一天下来手指能少走几百步。如果你用的版本快捷键不同,去自定义界面里查一下键盘设置就好。
2.2 列宽、冻结、排序、定位行:让几千行数据也能翻得动
表格里的交互其实不少:
- 拖列宽:字段多了以后,把关键的几列(比如编号、名称、面积)拖宽,其余列拖窄,一屏就能看完主要信息。
- 冻结列:右键列标题选"冻结/解冻列",冻结后的列会一直贴在表格左侧,左右滚动时不跑掉。核对编号和名称的时候,把编号列冻住特别有用。
- 排序:单击列标题即可升/降序切换。排序只是显示层的操作,不会改变数据本身。想按多个字段排序,要用工具而不是点列标题。
- 定位到某一行:在表格左下角的行号框里输入行号回车,直接跳过去。知道某个要素大概在第几行的时候特别好使。
- 切换选择:表格菜单里有"切换选择",把当前选中和未选中的记录对调。检查"有没有该选的没选中"时,这个功能一秒出结果。
还有一个很多人不知道的:Ctrl + 拖动列标题可以调整列顺序。这不改变字段在数据里的实际顺序,只是显示层的一个排列,做数据录入的时候按自己的业务逻辑排一下会舒服很多。
2.3 上万行的表怎么翻才不卡
属性表行数一多就会明显变慢,这不是错觉。常见原因有三个:
第一种是**"只显示被选中的记录"没打开**。表里有十万行,什么筛选都没做,软件就得把十万行全部画出来,自然卡。如果这时你是有选择集的,把表格选项里"只显示被选中的记录"勾上,屏幕上只剩你关心的那几百条,速度立刻回来。
第二种是把整个表拉到最底部。不少版本在表格滚动到末尾时会尝试加载更多行,行数很大时会卡住几秒。我的做法是:先在"按属性选择"里缩小范围,再看表,而不是硬往下滚。
第三种是对连接了外部表的大表做排序。连接本身已经让它变慢了,再叠加排序,很容易卡死。真要排序,先导出成独立表再排,稳得多。
提示:浏览大表时不要一边滚动一边编辑。滚动过程中触发的编辑很容易落到错误的行上,这种错误在图形上完全看不出来,只会在后面统计时冒出来。
3. 字段管理:新增、改名、删除的先后顺序
字段是整个属性表的地基。地基怎么打,决定了后面的计算、连接、统计顺不顺。我在这一块吃过的亏最多,所以讲得细一点。
3.1 字段命名这件事,吃过亏才知道讲究
字段名有几个硬规则,违反了直接报错:
- 不能以数字开头。
1_NAME是不行的,得写NAME_1。 - 不能包含空格、连字符、括号等特殊字符,一般用下划线代替。
- 不能使用保留字。像
AREA、LENGTH、OBJECTID、SHAPE、FID、DATE这些在部分数据库里是保留字,用它们做字段名,在导入导出到其他库时会出问题。 - 在文件地理数据库里字段名的长度上限是 64 个字符,但在 Shapefile 里只有 10 个。如果你先在地理数据库里建了
LAND_USE_CLASSIFICATION_CODE,再导出成 Shapefile,这个名字会被截断成LAND_USE_C之类的,而且可能和别的字段名撞车。
所以我现在建字段用的是"英文名 + 中文别名"的方案。字段的实际名用简短的英文或拼音缩写,比如YDDM(用地代码)、DLMC(地类名称),然后在图层属性里给它们设中文别名。中文别名只在显示层起作用,导出的原始结构还是干净的英文字段名。这样既方便自己写 SQL,又方便别人看表。
注意:中文别名方便阅读,但在字段计算器里写表达式时,用到的必须是字段的实际名称,不是别名。别名和实际名不一致的时候,表达式里写别名会直接报错,这个坑我见过太多次了。
3.2 字段长度、精度、小数位到底影响什么
添加字段的时候会看到"精度"和"小数位数"两个参数,很多人直接跳过用默认值。这两个东西的实际含义是这样的:
- 精度(Precision):字段能存的总有效数字位数。比如双精度字段精度设为 10,表示能存 10 位有效数字。
- 小数位数(Scale):小数点后面占的位数。设为 2,就是保留 2 位小数。
比如你要存面积,最大可能到 999999.99,那就需要总位数 8 位、小数位 2 位。要是小数位设成 0,存进去的 1234.56 会被取整成 1235——而且是直接截断或取整后存下来,不是只影响显示,这个损失是不可逆的。
有一个很典型的误解:有人以为双精度字段可以随便存很多位小数,只要小数位数设置大一点就行。实际上双精度本身只有约 15 位有效数字,超过这个长度后面的数字就是不可靠的。如果你的数据需要 18 位精度,那得用别的方案,比如转成文本存储。
3.3 删字段之前必须确认的三件事
删字段在软件里就是右键菜单一下的事,但删完的后果往往是不可逆的(除非你有备份)。我给自己定的规矩是删之前确认三件事:
第一,这个字段有没有被用在图层符号化、标注、定义查询里。如果标注表达式引用了DLMC字段,你把这个字段删了,标注会直接变成空,而且报错信息通常很含糊。
第二,这个字段有没有被连接或关联引用。连接键字段被删,连接自动断开,之前写好的汇总口径全部失效。
第三,有没有别的人正在用同一份数据。在多人协作的情况下,删字段造成的锁冲突和数据结构不一致,排查起来非常费劲。
实际的做法是:删字段之前先把数据复制一份,或者至少导出一次作为备份。这一步只花几秒钟,但能救回半天的工作。
4. 字段计算器:事故率最高的一个功能
如果要在属性表操作里评一个"最容易出事故"的功能,字段计算器稳居第一。原因不复杂:它直接改数据,而且操作起来快得让人放松警惕。
4.1 VBA解析器和 Python解析器怎么选
在经典桌面版里,字段计算器提供两种解析器:VB Script和Python。较新的 Pro 版本里 VB Script 已经不再提供,取而代之的是 Arcade 和 Python 3,所以写表达式之前先确认一下你手上是哪个版本。
选择原则其实很简单:
- 涉及简单的字符串拼接、取子串、类型转换,两种都能写,看哪个顺手。
- 涉及条件分支、循环、需要写好几行逻辑,用 Python,写代码块(Code Block)更清晰。
- 涉及在 Pro 里做快速的条件赋值,Arcade 一行就够,不用写代码块。
我在桌面版里做批量处理基本只用 Python,原因是逻辑一旦超过两行,VB 的可读性就崩了,过两天自己回头看都不知道在写什么。而在 Pro 里做简单的换算,Arcade 的IIf用起来更快。
4.2 字符串拼接、编号填充、条件赋值三类典型写法
下面这三类是我在工作中用得最多的,直接抄过去改字段名就能用。
第一类:编号自动填充。需要给每个要素编一个连续序号,Python 解析器的写法是在代码块里维护一个全局变量:
# 表达式 autoIncrement() # 代码块 rec = 0 def autoIncrement(): global rec pStart = 1 pInterval = 1 if (rec == 0): rec = pStart else: rec = rec + pInterval return rec写完之后如果效果不对,八成是忘记把保存的编辑状态确认下来,或者中间中断过一次导致计数乱了。这种序号填充必须一次算完,中途停掉再继续,序号会从 1 重新开始,得先清空字段再重算。
第二类:字符串拼接。把行政区和编号拼成完整编码:
# Python 解析器表达式 !XZQDM! + "-" + !YDDM!如果其中某个字段可能是空值,直接加号拼接会得到空结果,稳妥的写法是先转换:
# 表达式 "{}-{}".format(!XZQDM!, !YDDM!)第三类:条件赋值。把细类归并成大类,用 Python 代码块最清晰:
# 表达式 reclass(!DLMC!) # 代码块 def reclass(x): if x is None: return "未分类" if x in ("水田", "旱地", "水浇地"): return "耕地" if x in ("乔木林地", "灌木林地", "其他林地"): return "林地" return "其他"这里有个小细节值得说:先判空再判值。如果字段里有空值,x in (...)这种写法不会报错但会把空值归到"其他"里,数量对不上就得回头查半天。
4.3 计算结果不对时的排查顺序
字段计算器算完不对,按下面这个顺序排查,基本能覆盖九成情况:
- 有没有选择集存在。这是一个巨大的坑:如果表格里当前有选中的记录,字段计算器只对选中的记录生效,未选中的保持原值。结果就是你以为全表都算了,其实只算了你上次框选的那几十条。算之前先"清除选择"。
- 编辑会话有没有开启。Shapefile 和部分数据源必须开始编辑之后才能计算字段,会话没开的时候会直接报错或者什么都不发生。
- 字段类型对不对。往文本字段里写数字,会变成字符串;往数字字段里写文字,会报错。这个在计算之前用不着猜,看一眼字段类型就行。
- 表达式里的字段引用方式对不对。桌面版 Python 解析器要求字段名用感叹号包起来,写成
!字段名!;Arcade 里是$feature.字段名。写错了会报一个很笼统的错误。 - 结果是显示问题还是真的算错了。有时候数值是对的,只是列的显示宽度不够,看起来像是空的或者被截了。双击列标题调整一下列宽或者看属性就知道了。
提示:字段计算器执行的过程相当于一次性写入整列,桌面版里用撤销回退字段计算并不总是可靠。所以真正重要的字段,我习惯先另建一个字段算,核对无误再把它改成正式字段,或者算完立刻导出一份备份。
5. 按属性选择和SQL表达式:查询构建器的用法与坑
筛选记录是属性表操作里第二高频的动作。软件提供了一个"查询构建器"来帮你拼 SQL,但这个构建器跟真正的 SQL 语法并不完全一样,理解这一点能省很多时间。
5.1 查询构建器不只是"双击字段"
查询构建器的用法不只是双击字段名再点个等号。几个实用点:
- 完整的字段列表和唯一值列表。"获取唯一值"按钮会把该字段所有出现过的值列出来,做分类核查的时候,直接对着一列唯一值看有没有脏数据,比写表达式还快。
- 运算符不是装饰。
=、<>、>、<、>=、<=、LIKE、AND、OR、NOT、IN、BETWEEN都有,其中LIKE配合%做模糊匹配特别有用,比如"DLMC" LIKE '%林%'能把所有含"林"字的地类全捞出来。 - 连续值范围用 BETWEEN。
"MJ" BETWEEN 100 AND 500比写两个不等式再 AND 起来清爽。 - 多个值用 IN。
"DLMC" IN ('水田','旱地')比 用 OR 串两条短得多。
5.2 不同数据源的SQL语法差异
这是最容易被忽略也最容易出错的地方。字段名和字符串的包裹符号,在不同数据源下完全不一样:
| 数据源 | 字段名包裹 | 字符串包裹 | 示例 |
|---|---|---|---|
| 文件地理数据库 | 双引号 | 单引号 | "DLMC" = '耕地' |
| Shapefile | 双引号 | 单引号 | "DLMC" = '耕地' |
| 个人地理数据库(.mdb) | 方括号 | 单引号 | [DLMC] = '耕地' |
| 企业级数据库(如 SQL 类型) | 双引号或按库规范 | 单引号 | "DLMC" = '耕地' |
| 以查询图层方式加载的表 | 按数据库原生语法 | 按数据库原生语法 | 视具体库而定 |
实际经验是:在查询构建器里尽量用界面双击的方式生成,不要手打引号。手动打的引号类型不正确,经常会得到一个含糊的"表达式无效"提示,排查起来很浪费时间。
另外,日期字段的写法也有讲究。"TBRQ" = date '2024-05-01'这种带date前缀的写法只在部分数据源下有效,稳妥的做法是用查询构建器里的日期函数去生成。
5.3 选中之后能干什么
选出来只是第一步,后面能做的事情不少:
- 只导出选中记录。导出数据时选"选中的要素",就能生成一个只含筛选结果的新数据。
- 统计选中记录的汇总值。表菜单里的汇总功能会对当前选择集做统计。
- 在选中集内做进一步筛选。第二次按属性选择时,勾上"在当前选择集中选择",可以做逐层收窄的筛选。
- 切换选择做反向核查。用"切换选择"看看被排除的是什么,经常能发现数据里的异常值。
- 把选择集保存下来。有些版本支持把选择集保存为要素图层,后续可以反复调用。
注意:选择集不会自动更新。你在图形上改了属性值,如果这个值本来参与了筛选条件,选择集不会自己刷新,需要重新执行一次查询。这一点在做迭代核查的时候一定要记住。
6. 连接、关联与汇总统计:属性表的横向扩展
单张属性表能表达的信息是有限的。真正干活的时候,往往需要把外部数据(比如 Excel 里的人口数、台账里的权属信息)挂到要素上,这就用到了连接和关联。
6.1 Join 和 Relate 到底差在哪
很多人把这两个功能混着用,结果数据对不上还找不到原因。它们的区别其实很明确:
| 对比项 | 连接(Join) | 关联(Relate) |
|---|---|---|
| 结果形态 | 外部表的字段直接"长"到图层属性表上,看起来像一张表 | 不改变属性表结构,只是建立一种索引关系 |
| 是否可编辑 | 被连接进来的字段一般只读 | 两边都保持各自的可编辑状态 |
| 一对一/一对多 | 一对一最稳,一对多需要选"保留匹配记录" | 天然支持一对多 |
| 是否需要相同字段名 | 连接键字段名可以不同,但类型要匹配 | 也需要指定关联字段 |
| 典型用途 | 把外部属性挂上来做统计、出图 | 一个要素对应多条记录时做查询浏览 |
一句话总结:要用外部字段参与筛选、符号化、统计,就用连接;只是想在选中一条记录时能看到对应的多条明细,就用关联。我见过有人在需要统计的时候用了关联,结果统计出来只有主表数据,白干半天。
6.2 连接失败的四个常见原因与验证方法
连接操作经常"操作成功但数据没挂上",原因就那么几种:
第一,键字段类型不一致。左边是文本"001",右边是数字 1,看着一样,连不上。这是最高频的原因。验证方法是打开两个表的属性,看键字段的类型和实际值格式。
第二,键字段里有空格或不可见字符。从 Excel 里粘贴过来的编号,末尾经常带一个空格,肉眼看完全一样。验证方法是用字段计算器给键字段算一个len()出来,看长度是否一致。
第三,大小写或全半角不一致。这个在英文编号和中文编号混排的时候特别常见。
第四,连接后字段名被截断或加了后缀。Shapefile 的字段名只有 10 个字符,连接进来一长串字段名,互相截断后就分不清了。验证方法是连接完成后先导出成独立表,再检查字段名。
我自己的固定流程是:连接之前先用汇总统计工具核对两边的唯一值个数和记录数,连完之后再核对一次"有匹配"和"没匹配"的数量,两次数量对得上,这个连接才算真的成功。
6.3 汇总统计与属性表导出
汇总统计是我用得最多的工具之一。它的逻辑很简单:按一个"分类字段"(Case Field)分组,对指定的统计字段计算总和、平均值、最大最小值、计数等。比如按乡镇统计耕地面积总和,设置好分类字段和统计字段,几秒钟就出一张新表。
这里有两个细节值得注意:
- 统计字段必须是数值型。文本型字段只能做计数,做求和会报错或者给出一堆空值。
- 分类字段里的空值会被单独归成一组。如果结果里出现一条分类为空、数值很大的记录,多半是数据里有几行没填分类字段,需要回去补。
导出属性表用"表转 Excel"这类工具就行,方向反过来用"Excel 转表"。这里有个广为人知的坑:Excel 文件在连接状态下不能编辑,也不能被覆盖导出。如果导出时报"文件被占用",检查一下是不是 Excel 还开着这个文件,或者 ArcGIS 里还挂着一个指向它的连接。
还有一个坑是字段类型推断:把 Excel 读进来的时候,软件会按前几行来猜每列的类型,如果某一列前面是数字、后面突然出现文字,整列会被判成文本,数值就没法做统计了。稳妥的做法是把 Excel 里的列格式先统一好,或者干脆先用文本字段载入,之后再转换。
7. 属性编辑的纪律:乱码、显示异常与不可逆操作
前面讲的是技能,这一段讲讲纪律。属性表操作里真正造成事故的,往往不是不会用,而是用得太随意。
7.1 编辑会话、字段锁定与"只读"陷阱
编辑属性有两种路径:直接在属性表里改单元格,或者用字段计算器批量改。前者需要开始编辑会话,后者在部分数据源下也需要。没有开始编辑的时候,表格要么点不动,要么改了不保存。
编辑会话还有几个容易踩的问题:
- 编辑会话没结束就导出。未保存的修改不会进入导出结果,导出来的还是老数据。
- 编辑会话开着的时候做了别的操作,比如结构调整,容易触发锁冲突。表格结构变更和属性编辑尽量分开做。
- 连接进来的字段是只读的。想改连接表里的值,得回到源表去改,或者先把连接导成独立表。
另外,加入地理数据库的数据集在符号化、拓扑等场景下会自动进入"被使用"状态,这时候即使你开始了编辑,某些字段依然是只读的。遇到改不动的情况,先确认一下图层是不是正在被别的功能占用。
7.2 中文乱码和小数点前不显示0这类显示问题
中文乱码在 Shapefile 上尤其常见。属性表里的中文变成一堆问号或者方块,通常跟 dbf 文件记录的代码页信息有关。处理思路有两个方向:一是把数据转进文件地理数据库,乱码基本消失;二是如果要继续交付 Shapefile,从源头(能正确显示的那份数据)重新导出,而不是在乱码的表上改。用复制粘贴的方式在乱码表里改字段,往往会把乱码固化下来。
小数点前不显示 0(比如 0.35 显示成 .35)这类问题,多数情况下是显示格式的设置问题,不是数据本身错了。可以在表格的字段属性里调整数字格式,或者检查一下系统的区域设置。要提醒的是:这类调整只影响显示,不改变存储值,如果导出后依然如此,说明导出的是显示样式而不是底层数据,需要回到字段类型和精度上找原因。
还有一个类似的情况:数字字段显示为####。这不是数据丢了,是列宽不够,把列拖宽就恢复。看到####千万别急着重新计算一遍,先拖一下列宽。
7.3 我给自己定的几条属性表纪律
最后把我这些年形成的几条固定习惯列出来,都是吃过亏之后才养成的:
- 动数据之前先备份。哪怕只是加一个字段,也先复制一份。属性表操作比图形编辑更隐蔽,出了问题往往在很久之后才发现。
- 字段计算前后各核对一次记录数和选中数。用汇总统计里的计数看一眼,两次一致再往下走。
- 重要字段先算到临时字段里验证,确认无误再转正。这个习惯帮我躲过了好几次批量算错的事故。
- 看到选择集就先清掉再动手。只要表格里有高亮,任何批量操作我都默认它是"只改选中项"。
- 编号类字段一律用文本存储。前导零、超长编号、字母数字混合,这三种情况用数字字段迟早出问题。
- 导出给别人之前先检查字段名长度和字段名类型。10 个字符的限制是硬性的,截断之后想改回来只能重来。
这些条条框框听起来啰嗦,但做熟了以后就是肌肉记忆。属性表这个东西,功夫不在操作本身,而在于你清不清楚每一步操作会对后面的环节产生什么影响。想清楚这一点,剩下的就是熟练度的问题了。