Pytanie jest niejasne, ale wygląda na to, że próbujesz wykonać dopasowanie równości, które nie zwraca oczekiwanych wierszy, więc zgaduję, że problem polega na tym, że milisekundy są problematyczne. Istnieje kilka podejść tutaj:
- sformatuj obie wartości (jako varcharetc) używając CONVERT:drogie dla procesora, nie można użyć indeksu
- użyj DATEDIFF/DATEPART do wykonania tematu — podobnie, ale nie zupełnie tak drogie
- utwórz zakres do przeszukiwania
Trzecia opcja jest prawie zawsze najbardziej wydajna, ponieważ może dobrze wykorzystać indeksowanie i nie wymaga dużej ilości procesora.
Na przykład w powyższym, ponieważ twoja precyzja to sekundy*, użyłbym:
DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)
następnie dodaj GDZIE formularza:
WHERE column_datetime >= @p_date AND column_datetime < @end
Będzie to działać najlepiej, jeśli masz indeks klastrowy na column_datetime, ale powinno nadal działać poprawnie, jeśli masz indeks nieklastrowy na column_datetime.
[*=jeśli @p_date zawiera milisekundy, musisz zastanowić się, czy przyciąć te ms za pomocą DATEADD
lub zrób mniejszy zakres itp.]