【发布时间】:2020-08-26 14:34:09
【问题描述】:
我需要检查所有主键列是否有所有值都为大写。
所以,我有一个第一个请求,它返回我作为 PK 一部分的表字段对。
SELECT table_name, field_name FROM dico WHERE pkey > 0;
(dico 是一些提供该信息的表。无需在 SQL Schema 中查找...)
而且,对于上面第一个查询中列出的所有这些对 tx/fx,我需要查找不会大写的值。
SELECT DISTINCT 't1', 'f1', f1 FROM t1 WHERE f1 <> UPPER(f1) UNION ALL
SELECT DISTINCT 't2', 'f2', f2 FROM t2 WHERE f2 <> UPPER(f2) UNION ALL
...
SELECT DISTINCT 'tn', 'fn', fn FROM tn WHERE fn <> UPPER(fn);
(我将表名和字段名作为“字符串”放在输出中,以便知道错误值的来源。)
如您所见,我确实有这两个请求的代码,但我不知道如何将它们组合起来(如果可能,以适用于 SQL Server 和 Oracle 的通用方式)。
你能给我一些关于如何完成它的想法吗?
【问题讨论】:
-
添加只传递大写值的约束。
-
这相当棘手,因为 Oracle 默认情况下区分大小写,但 SQL Server 不区分。
-
我无法添加约束。我需要检查里面有什么——有些东西是通过外部系统、Excel 文件等导入的。
-
@GordonLinoff 如果我需要编写 2 个不同的查询,因为区分大小写,就这样吧。这不是一个硬性要求,而是一个很好的要求(在两个环境中都可以使用相同的请求)。
标签: sql sql-server oracle union dynamic-sql