LIKE / NOT LIKEのパラメーターと%記号を渡して、アプリケーションから渡されたものに基づいて実行される動的クエリを作成しようとしています。TSQLが、ブール値ではないため、like / not likeのパラメーターについて混乱しているため、エラーが発生します。この方法でそれを行うことは可能ですか、それとも渡されているパラメーターを確認するために複数のifステートメントを作成する必要がありますか?
@fullName varchar(100), @SrchCriteria1 varchar(15), @SrchCriteria2 varchar(15),
@fullName1 varchar(100), @SrchCriteria3 varchar(15), @SrchCriteria4 varchar(15),
@fullName2 varchar(100), @SrchCriteria5 varchar(15), @SrchCriteria6 varchar(15),
@qualifer varchar(10), @qualifer1 varchar(10), @qualifer2 varchar(10)
SELECT d.*
FROM defendants_ALL d, #tmpFullname t1, #tmpFullname1 t2, #tmpFullname2 t3
WHERE d.combined_name + @qualifer + @SrchCriteria1 + t1.Item + @SrchCriteria2
and d.combined_name + @qualifer + @SrchCriteria3 + t2.Item + @SrchCriteria4
and d.combined_name + @qualifer + @SrchCriteria5 + t3.Item + @SrchCriteria6
EXEC uspJudgments @qualifier = 'LIKE', @qualifier1 = 'LIKE', @qualifier = 'NOT LIKE', @fullName = 'johns', @fullName1 = 'jim,j.', @SrchCriteria1 = '%', @SrchCriteria2 = '%', @SrchCriteria3 = '%', @SrchCriteria4 = '%', @fullName2 = 'johnson', @SrchCriteria5 = '%', @SrchCriteria6 = '%'
したがって、jimjohnsとjのすべての組み合わせが返されます。johnsですが、jimjohnsonとjは含まれません。ジョンソン。それがまれな組み合わせであることは知っていますが、より一般的なATMの方が良いとは思いませんでした。
動的SQL:
DECLARE @Query NVarChar(1024)
SET @Query = 'SELECT d.* FROM defendants_ALL d, #tmpFullname t1, #tmpFullname1 t2, #tmpFullname2 t3' +
'WHERE d.combined_name' + @qualifier + @SrchCriteria1 + 't1.Item' + @SrchCriteria2 +
' and d.combined_name' + @qualifier + @SrchCriteria3 + 't2.Item' + @SrchCriteria4 +
' and d.combined_name' + @qualifier + @SrchCriteria5 + 't3.Item' + @SrchCriteria6