Este é mais um exemplo da importância de normalizar seus dados.
Manter vários pontos de dados em uma única coluna quase nunca é o design correto, e por quase nunca quero dizer cerca de 99,9999%.
Se você não puder normalizar seu banco de dados, poderá usar uma solução alternativa como esta:
SELECT *
FROM Projects p
WHERE EXISTS (
SELECT Project_ID
FROM Feedback F WHERE ID = 268
AND Project_ID IS NOT NULL
AND ';'+ F.Project_ID +';' LIKE '%;'+ CAST(p.Project_ID as varchar) +';%'
)
Você não pode usar o
IN
pois está esperando uma lista de valores delimitados por uma vírgula, enquanto você tenta fornecê-lo com um único valor delimitado por um ponto e vírgula. Mesmo que os valores em Project_ID fossem delimitados por uma vírgula, ainda assim não funcionaria. O motivo pelo qual adicionei o
;
em cada lado do Project_ID
em ambas as tabelas é que desta forma o LIKE
operador retornará true
para qualquer local, ele encontra o Projects.Project_Id
dentro do Feedback.Project_Id
. Você deve adicionar o ;
para o Projects.Project_Id
para evitar o LIKE
para retornar true
quando você estiver procurando por um número que seja uma correspondência parcial com os números na string delimitada. Considere procurar 12 em uma string contendo 1;112;455 - sem adicionar o delimitador ao valor de pesquisa (12 neste exemplo) o LIKE
operador retornaria true
.