A questão não está clara, mas parece que você está tentando fazer a correspondência de igualdade que não está retornando as linhas que você espera, então suponho que o problema é que os milissegundos estão sendo problemáticos. Existem várias abordagens aqui:
- formate ambos os valores (como varcharetc) usando CONVERT :caro para CPU, não pode usar índice
- use DATEDIFF/DATEPART para fazer matemática - semelhante, mas não muito tão caro
- crie um intervalo para pesquisar
A 3ª opção é quase sempre a mais eficiente, pois pode fazer bom uso da indexação e não requer muita CPU.
Por exemplo, no exemplo acima, como sua precisão é segundos*, eu usaria:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)
em seguida, adicione um WHERE do formulário:
WHERE column_datetime >= @p_date AND column_datetime < @end
Isso funcionará melhor se você tiver um índice clusterizado em column_datetime, mas ainda deve funcionar bem se você tiver um índice não clusterizado em column_datetime.
[*=se @p_date incluir milissegundos, você precisaria pensar mais sobre cortar esses ms via
DATEADD
, ou faça um intervalo menor, etc]