Sql server 2008 存储过程中的TSQL筛选器无法进行数字转换
我有一个返回值的子查询。如果该值大于外部查询选择的范围,则应返回外部查询的最高值 鉴于以下情况:Sql server 2008 存储过程中的TSQL筛选器无法进行数字转换,sql-server-2008,tsql,filtering,Sql Server 2008,Tsql,Filtering,我有一个返回值的子查询。如果该值大于外部查询选择的范围,则应返回外部查询的最高值 鉴于以下情况: DECLARE @ExternalPixelValue VARCHAR(MAX) DECLARE @SecondsTriggerValue INT DECLARE @Trigger INT SELECT TriggerValue FROM vw_ContainerBehaviouralPixels WHERE TriggerValue < 9000 SELECT @Extern
DECLARE @ExternalPixelValue VARCHAR(MAX)
DECLARE @SecondsTriggerValue INT
DECLARE @Trigger INT
SELECT TriggerValue
FROM vw_ContainerBehaviouralPixels
WHERE TriggerValue < 9000
SELECT
@ExternalPixelValue = ExternalPixelValue,
@SecondsTriggerValue = CONVERT(INT, TriggerValue),
@Trigger = SUM(p.LastEventTimeSpan)
FROM
PageVisitEvents p
RIGHT JOIN
vw_ContainerBehaviouralPixels vwc ON p.AccountContainerID = vwc.AccountContainerID
WHERE
vwc.SystemBehaviouralSegmentID = 2 -- minimum time on site
AND
CONVERT(INT, vwc.TriggerValue) < (SELECT 99999)
GROUP BY
ExternalPixelValue, TriggerValue
SELECT @ExternalPixelValue, @SecondsTriggerValue, @Trigger
第一个查询返回值:10、30、60、90、180、300、360
现在,在11的子查询中输入一个值,返回10;31到60之间的任何值都返回30,以此类推。问题是,当我在180中输入任何内容时,90总是返回。当我将表值从90更改为99时,仍然只返回99
TriggerValue是VARCHAR512,这就是为什么要在上面进行转换。如果已配置,则过滤器将识别字符,而不是数字值。然而,在使用CONVERT和CAST之后,我仍然看到同样的问题
有什么建议吗
谢谢。您正在填充变量
@ExternalPixelValue, @SecondsTriggerValue, @Trigger
一次又一次,所以最终,您无法控制它们包含的值,即上次读取的值
如果编写这样的语法,请确保每个变量只得到一个结果,或者不关心选择哪个结果。如果TriggerValue是varchar,第一个查询如何工作?你不也应该在那里皈依吗?你想要的是返回的最大值大于你所输入的值?举几个例子!请添加视图定义。并学习格式化,以便我们可以阅读它谢谢你的提示。在我更改查询以返回所有值之后,我发现了问题——前面提到的两个问题。90是最后一个返回的结果,因为我没有将TriggerValue转换为INT,所以它是按字符排序的,而不是按数字排序的。修复了,谢谢。我还选择了描述顺序中的TOP1。