Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 存储过程中的TSQL筛选器无法进行数字转换_Sql Server 2008_Tsql_Filtering - Fatal编程技术网

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。