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'