【问题标题】:Stored procedure not returning results存储过程不返回结果
【发布时间】:2021-03-22 16:36:23
【问题描述】:

我写了一个存储过程,但这并没有返回任何结果。该程序的查询工作正常。但同样的查询在过程中不会返回任何结果。

程序:

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),可能需要更长的时间。
  • 是的,很遗憾我忘记了,现在可以使用了,谢谢 :)
  • 您使用的是什么不受支持的 SQL Server 版本?

标签: sql sql-server sql-server-2008


【解决方案1】:

尝试在 2 个单独的条件之间使用 Parenthesis 并同时使用 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
  • @DaleK- VARCHAR(MAX) 应该只占用所需的内存吗?而不是占用8000字节
  • 在这种情况下添加不必要的括号会令人困惑。
  • 使用VARCHAR(MAX) 表示任何长度的字符串都是有效的——这是极不可能的。使用有意义的值要好得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 2013-06-21
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多