Sql 错误可能真的与第一个视图中未返回的行有关。是的,确切地说,据我所知,谓词下推可能会导致首先计算where子句中的任何内容,即使它来自引用视图的where子句,甚至在对视图中的条件本身进行评估之前——如果有一些行在视图之外,仍然可以根据给定的条件对它们进行评

Sql 错误可能真的与第一个视图中未返回的行有关。是的,确切地说,据我所知,谓词下推可能会导致首先计算where子句中的任何内容,即使它来自引用视图的where子句,甚至在对视图中的条件本身进行评估之前——如果有一些行在视图之外,仍然可以根据给定的条件对它们进行评,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,错误可能真的与第一个视图中未返回的行有关。是的,确切地说,据我所知,谓词下推可能会导致首先计算where子句中的任何内容,即使它来自引用视图的where子句,甚至在对视图中的条件本身进行评估之前——如果有一些行在视图之外,仍然可以根据给定的条件对它们进行评估。我通过将第一个视图的结果先插入到表中,然后在另一个视图中引用该表来解决问题。我希望这将解决问题,因为第二个视图不再需要依赖第一个视图进行评估,因为第一个视图的结果将在一个表中。您能为给定的问题翻译一下吗?:)我认为这里的想法是,在应用内部视


错误可能真的与第一个视图中未返回的行有关。是的,确切地说,据我所知,谓词下推可能会导致首先计算where子句中的任何内容,即使它来自引用视图的where子句,甚至在对视图中的条件本身进行评估之前——如果有一些行在视图之外,仍然可以根据给定的条件对它们进行评估。我通过将第一个视图的结果先插入到表中,然后在另一个视图中引用该表来解决问题。我希望这将解决问题,因为第二个视图不再需要依赖第一个视图进行评估,因为第一个视图的结果将在一个表中。您能为给定的问题翻译一下吗?:)我认为这里的想法是,在应用内部视图的where子句之前,SQL Server可能会尝试根据“line”字段来评估外部视图中的where子句。因此,错误可能确实与第一个视图中未返回的行有关。是的,确切地说,据我所知,谓词下推可能会导致where子句中的任何内容首先被计算,即使它来自引用视图的where子句,甚至在对视图中的条件本身进行评估之前——如果有一些行在视图之外,仍然可以根据给定的条件对它们进行评估。我通过将第一个视图的结果先插入到表中,然后在另一个视图中引用该表来解决问题。我希望这能解决这个问题,因为第二个视图不再需要依赖第一个视图进行评估,因为第一个视图的结果将在一个表中。
 SELECT id, CAST((CASE WHEN 
                  LEN(line) = 1 
                  THEN ISNULL(LTRIM(RTRIM(line)), '-1') 
                  ELSE 
                  ISNULL(LTRIM(RTRIM(SUBSTRING(line, 1, (CHARINDEX(CHAR(9), 
                  line) - 1)))), '-1') 
           END) AS varchar(MAX)) AS ObjMarker
 FROM  dbo.tblM2016_RAW_Current_Import_File
 WHERE ((CASE WHEN 
          LEN(line) = 1 
          THEN ISNULL(LTRIM(RTRIM(line)), '') 
          ELSE 
          LTRIM(RTRIM(SUBSTRING([line], 1, CHARINDEX(CHAR(9), [line])))) 
          END) <> CHAR(9)) 
          AND 
          ((CASE WHEN 
          LEN(line) = 1 
          THEN ISNULL(LTRIM(RTRIM(line)), '') 
          ELSE 
          LTRIM(RTRIM(SUBSTRING([line], 1, CHARINDEX(CHAR(9), [line])))) 
          END) NOT LIKE '%*%') 
          AND 
          ((CASE WHEN 
          LEN(line) = 1 
          THEN ISNULL(LTRIM(RTRIM(line)), '') 
          ELSE LTRIM(RTRIM(SUBSTRING([line], 1, CHARINDEX(CHAR(9), 
          [line])))) END) <> '')
 SELECT curr.id
 ,curr.ObjMarker
 ,Nxt.id AS NxtID
 ,Nxt.ObjMarker AS NxtObjMarker
 ,Nxt.id - curr.id - 2 AS OFFSET
 ,curr.id + 1 AS StrtRec
 ,Nxt.id - 1 AS EndRec
 FROM  dbo.vwM2016_RAW_Import_File_Object_Line_Markers AS curr 
 LEFT OUTER JOIN
 dbo.vwM2016_RAW_Import_File_Object_Line_Markers AS Nxt ON 
 Nxt.id =
 (SELECT MIN(id) AS Expr1
 FROM   dbo.vwM2016_RAW_Import_File_Object_Line_Markers AS source
 WHERE (id > curr.id))
 WHERE curr.ObjMarker <> '0' 
 ISNULL(LTRIM(RTRIM(SUBSTRING(line, 1, (CHARINDEX(CHAR(9), 
                  line) - 1)))), '-1') 
          WHEN CHARINDEX(CHAR(9), line) = 0 THEN '-1'