SQL Server 2017:无效的长度参数

时间:2018-08-23 19:54:51

标签: sql-server

INSERT INTO #NEWSTATICFILTER
    SELECT DISTINCT 
        (SELECT STATICNAME FROM #STATICFILTER WHERE IDNUM = @ic) AS STATICNAME,
        (SELECT 1  
         FROM [CoSD].[ERSCommodityDataSeries] CD 
         WHERE CD.ERSCommodity_ID IN (LTRIM(RTRIM(CONVERT(INT, (SELECT SUBSTRING (M.STATICNAME, CHARINDEX('(', M.STATICNAME, 0) + 1, (CHARINDEX(')', M.STATICNAME, 0) - CHARINDEX('(', M.STATICNAME, 0) - 1)) 
                                                                FROM #STATICFILTER M 
                                                                WHERE IDNUM = @ic))))) 
           AND (CD.ERSCommodity_SourceSeriesID NOT LIKE '%(N%' OR CD.ERSCommodity_SourceSeriesID IS NULL)),
        (SELECT 1  FROM [CoSD].[ERSCommodityDataSeries] CD 
         WHERE CD.ERSCommodity_ID IN (LTRIM(RTRIM(CONVERT(INT, (Select SUBSTRING (M.STATICNAME,CHARINDEX('(',M.STATICNAME,0)+1,(CHARINDEX(')',M.STATICNAME,0)-CHARINDEX('(',M.STATICNAME,0)-1)) FROM #STATICFILTER M WHERE IDNUM =@ic )) )) )AND CD.ERSCommodity_SourceSeriesID LIKE '%(N%' AND CD.ERSCommodity_SourceSeriesID IS NOT NULL),

当我尝试执行此查询时,它将引发以下错误:

  

传递给LEFT或SUBSTRING函数的长度参数无效

我知道这是一个重复的问题,但是我对如何解决这个问题一无所知。

1 个答案:

答案 0 :(得分:0)

如果没有您的数据,我认为这是无法回答的,因为查询的确切行为将取决于数据。据我从您提供的查询结果看,问题似乎是您有一个或多个M.STATICNAME条目,其中没有)。您正在尝试使用)在字符串中的位置减去(在字符串中的位置。)来计算两个SUBSTRING的长度。如果不存在,该值将变为0-某个值导致负值。看来字符串确实有一个(或整个东西变成0-(0-1)就是1。

在#STATICFILTER中查找类似于'%(%',而不是'%)%'的内容。