我必须使用业务规则来确保数据库的有效性。 我使用“选择查询”来浏览我表格的每一行。 当识别出错误时,我将此错误插入带有消息的错误表中。
这是一个简单的例子:
INSERT INTO SUPPLIER_ERR (numSupplier, nameSupplier,telephoneNumber, MESSAGE)
SELECT numSupplier,nameSupplier,telephoneNumber,
CASE
WHEN telephoneNumber = ''
then 'Must be filled'
When telephoneNumber NOT LIKE '+[0-9][0-9]([0-9][0-9])%'
then 'Must be to this format "+00(00)000000"'
END AS message
FROM dbo.supplier;
这个解决方案有效,但有时候在我的错误表中我有一个空消息行,当我是一个imbricated case。 例如:
WHEN LEN(numCustomer,2) = 'CN'
then
Case
when (RTRIM(mailCustomer) LIKE '.')
THEN 'Must be x'
end
WHEN LEN(numCustomer) != 'CN' AND RTRIM(mailCustomer) != ''
THEN 'Must be empty'
我理解为什么我得到一条空信息(当它执行第一种情况并且不执行第二种情况时)
WHEN LEN(numCustomer,2) = 'CN'
then
Case
when (RTRIM(mailCustomer) LIKE '.')
THEN 'Must be x'
end
我的问题是:
如何查看我的邮件是否为空? (而不是在我的错误表中插入)
答案 0 :(得分:0)
select语句正在查看每一行 - 而不仅仅是那些您认为有错误的行。如果未提供CASE
子句,则ELSE
语句将为不符合您已检查过的条件之一的每一行返回NULL。
因此,您有两种选择:
INSERT INTO SUPPLIER_ERR (numSupplier, nameSupplier,telephoneNumber, MESSAGE)
SELECT numSupplier,
nameSupplier,
telephoneNumber,
CASE
WHEN {Check 1 goes here} THEN 'Error message 1'
WHEN {Check 2 goes here} THEN 'Error message 2'
WHEN {Check 3 goes here} THEN 'Error message 3'
ELSE 'No error detected'
END
WHERE
子句 - 检查行是否与您的某个条件匹配,或者作弊一点,只返回返回错误消息的行不是NULL:INSERT INTO SUPPLIER_ERR (numSupplier, nameSupplier,telephoneNumber, MESSAGE)
SELECT numSupplier,
nameSupplier,
telephoneNumber,
CASE
WHEN {Check 1 goes here} THEN 'Error message 1'
WHEN {Check 2 goes here} THEN 'Error message 2'
WHEN {Check 3 goes here} THEN 'Error message 3'
END
WHERE CASE
WHEN {Check 1 goes here} THEN 'Error message 1'
WHEN {Check 2 goes here} THEN 'Error message 2'
WHEN {Check 3 goes here} THEN 'Error message 3'
END IS NOT NULL