テキストとして保存された式の形式でカスタム検証基準を含む 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
ただし、ネストされたクエリを 1 つとして書き直すことができるかどうか、またはこのシナリオですべての行の有効性をテストするためのより良い方法があるかどうかはわかりません。
前もって感謝します!