我知道这涉及到一些细节,但我正在实现一些处理多语言信息的操作。
在大约 1.9 亿行的原始摄取表上,我想捕获供应商发送给我们的所有内容,但我只应该传递一小部分已批准语言的行。
最初,该列表仅有英语,但现在他们希望扩大“批准”语言的列表。
所以我有很多地方的处理步骤是
WHERE lang_code = 'en'
需要进行调整。
我想到了一些实现方法
- 在例行处理供稿时,表格变量非常小,其中包含 2-3 行“已批准”代码。
- 非常小的永久表格,可容纳 2-3 行已批准的代码。
- PATINDEX 转换为经过批准的代码的逗号分隔字符串(例如 WHERE PATINDEX('%,'+lang_code+',%', ',en,de,pl,') > 0)
这个名单可能会增加到 5 或 6 个,但不太可能超过 10 个。
对于这种非常短的列表,我想知道人们可能会在哪里看到表格实现和“在这个短字符串中”的实现之间的界限。
我会画一条线,并使用一个永久
ApprovedLanguage
表,该lang_code
列作为主键。这样,添加或删除语言时无需更改代码;只需根据需求的变化添加/删除行即可。绝对不要走这
PATINDEX(...)
条路,因为该函数不是可搜索的并且会阻止索引查找,并导致性能不佳。使用字符串更易于维护,如果 SQL 语句是在应用程序中构建的,则可以将“认可语言”写在配置文件中,无需编程经验的用户也可以编辑它,并且有许多工具可以处理它。使用数据表,只有 DBA 或开发人员可以修改它,或者您必须为普通用户制作一个编辑器。
您可以用它
STRING_SPLIT
来处理字符串。