La domanda non è chiara, ma sembra che tu stia cercando di eseguire la corrispondenza di uguaglianza che non restituisce le righe che ti aspetti, quindi suppongo che il problema sia che i millisecondi sono problematici. Ci sono diversi approcci qui:
- formatta entrambi i valori (come varcharetc) usando CONVERT :costoso forCPU, impossibile usare index
- usa DATEDIFF/DATEPART per fare le cose - simile, ma non abbastanza poco costoso
- crea un intervallo tra cui cercare
La terza opzione è quasi sempre la più efficiente, poiché può fare buon uso dell'indicizzazione e non richiede grandi quantità di CPU.
Ad esempio, in quanto sopra, poiché la tua precisione è di secondi*, userei:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)
quindi aggiungi un WHERE del modulo:
WHERE column_datetime >= @p_date AND column_datetime < @end
Funzionerà meglio se hai un indice cluster su column_datetime, ma dovrebbe comunque funzionare correttamente se hai un indice non cluster su column_datetime.
[*=se @p_date include millisecondi dovresti pensare di più se tagliare quei ms tramite DATEADD
o esegui un intervallo più piccolo, ecc.]