Хранимая процедура не возвращает результаты

Я написал хранимую процедуру, но она не возвращает никаких результатов. Запрос процедуры работает нормально. Но тот же запрос не возвращает никакого результата в процедуре.

Процедура:

ALTER proc [dbo].[GetValuesByDateRange](@dateFrom as datetime2, @dateTo as datetime2, @devId as varchar)
as
select *
from SensorValues
where AddDate between @dateFrom and @dateTo
and JSON_VALUE(Value,'$.DevId') = @devId

Запрос

select *
from SensorValues
where AddDate
between '2020-12-10 00:00:00' and '2020-12-14 00:00:00'
and JSON_VALUE(Value,'$.DevId') = '408414743'

varchar всегда должен иметь длину... иначе это varchar(1), которое усекает ваше значение. Вам нужно как минимум varchar(9) для ваших образцов данных, возможно, дольше.
Dale K 11.12.2020 10:01

Да, к сожалению, забыл, теперь работает, спасибо :)

Emin Adiloğlu 11.12.2020 10:16

Что вы используете неподдерживаемую версию SQL Server?

Gordon Linoff 11.12.2020 14:14
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте использовать круглые скобки между двумя отдельными условиями, а также используйте varchar (max) вместо одного varchar

ALTER proc [dbo].[GetValuesByDateRange](@dateFrom as datetime2, @dateTo as datetime2, 
@devId as varchar(9))
as
select * from SensorValues 
where (AddDate between @dateFrom and @dateTo)
and JSON_VALUE(Value,'$.DevId')= @devId

Какая разница? Скобки ничего не меняют! И лучше выбрать подходящую длину, чем использовать max.

Dale K 11.12.2020 10:02

@DaleK- VARCHAR(MAX) Должен ли обряд занимать только требуемую память? Вместо того, чтобы занимать 8000 байт

Thiyagu 11.12.2020 10:05

Добавление ненужных скобок в этом случае сбивает с толку.

Dale K 11.12.2020 10:06

Использование VARCHAR(MAX) указывает, что допустима строка любой длины, что крайне маловероятно. Гораздо лучше использовать значимые значения.

Dale K 11.12.2020 10:09

Другие вопросы по теме