エラーは発生しませんが、ワイルドカードと動的SQL内の変数を含む条件でLIKEを使用すると機能しないようです。これが例です。
コードと呼ばれる列には、A0B01C02、A0B02C2D05、A0B02C2D05 などの値があり、「B1」などのサブセットを含む行で一致させようとしています。これを行うと、期待どおりに機能し、結果が返されます。
set @sql='select * from table where code like ''%B01%'''
exec sp_executesql @sql
変数セット @code='B01' の値をハードコーディングし、SQL ステートメントを変更して引用符とワイルドカードを連結すると、次のようになります。
set @sql='select * from table where code like ' +''''+ '%'+@code + '%' + ''''
exec sp_executesql @sql
これは期待どおりの結果を返しますが、変数をハードコーディングする必要がありました。ただし、B01 の変数を使用して一致させる必要があり、その変数が select ステートメントで設定されている場合、結果が返されません。次のように nvarchar を定義します。
set @code=(select top 1 code from anotherTable where USERID=@PersonId)
ただし、上記の select ステートメントが期待どおりのコードを返すことを確認しました。エラーはありませんが、クエリは「正常に実行されました」です。where 句の構文に何か不足がありますか?