我在 SQL Server 2008 中有一个表,其中包含以文本形式存储的表达式的自定义验证条件,例如
StagingTableID CustomValidation
----------------------------------
1 LEN([mobile])<=30
3 [Internal/External] IN ('Internal','External')
3 ([Internal/External] <> 'Internal') OR (LEN([Contact Name])<=100)
...
我有兴趣确定表中的所有行是否都通过条件语句。为此,我正在编写一个验证存储过程,它检查给定表中给定字段中的所有值是否满足给定条件。SQL 不是我的强项,所以在阅读了这个问题之后,这是我第一次尝试解决这个问题:
EXEC sp_executesql N'SELECT @passed = 0 WHERE EXISTS (' +
N'SELECT * FROM (' +
N'SELECT CASE WHEN ' + @CustomValidationExpr + N' THEN 1 ' +
N'ELSE 0 END AS ConditionalTest ' +
N'FROM ' + @StagingTableName +
N')t ' +
N'WHERE t.ConditionalTest = 0)'
,N'@passed BIT OUTPUT'
,@passed = @PassedCustomValidation OUTPUT
但是,我不确定嵌套查询是否可以重写为一个,或者在这种情况下是否有更好的方法来测试所有行的有效性?
提前致谢!