关于dynamic sql query
,我面临着一个非常孤立的问题。我有两个查询在单个stored procedure
上运行。他们正在关注
第一个查询:
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY viwPerformance.LastModifiedOn DESC) AS rowNumber,viwPerformance.* FROM viwPerformance WHERE OrgId=218 AND EmployeeId = 1668 AND IsTerminate = 0 AND TagId LIKE '%' + CAST(2893 AS VARCHAR) + '%' AND Archive='False' AND SmartGoalId IS NOT NULL
) AS E
WHERE rowNumber >= 1 AND
rowNumber < 11
结果为所有列值和SmartGoalId为
4471,2815,4751,4733,4863,4690,4691,4692,4693,4694
第二个查询(在这里,我只需要上述查询中的SmartgoalId,所以我可以使用东西)
SELECT @strGoalIds = STUFF((SELECT ',' + CAST(SmartGoalId AS VARCHAR)
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY viwPerformance.LastModifiedOn DESC) AS rowNumber,viwPerformance.* FROM viwPerformance WHERE OrgId=218 AND EmployeeId = 1668 AND IsTerminate = 0 AND TagId LIKE '%' + CAST(2893 AS VARCHAR) + '%' AND Archive='False' AND SmartGoalId IS NOT NULL
) AS E
WHERE rowNumber >= 1 AND
rowNumber < 11 FOR XML PATH('')), 1, 1, '')
结果是SmartgoalId为
4471,2815,4751,4733,4863,4651,4690,4691,4692,4693
请注意,最后一个ID“4694”在上面的查询中不可用,因为添加了“4651”,但在第一次查询中不可用,这是正确的,因为“4651”不应出现在第二个查询结果中。
所以我的主要观点是为什么第二个查询给出的结果与第一个查询相同的原因不同。
注意:对吗,
Stuff
函数会反转这些值,而不是按正确的顺序给出它们。 最佳答案
因为您有一些行的LastModifiedOn值相同,所以这取决于您要如何处理关系。
如果希望此查询始终返回最“最近”的10行,但在有联系时始终返回相同的行,则可以在ORDER BY viwPerformance.LastModifiedOn DESC
子句中添加另一列,以使排序唯一且不变,例如:
ORDER BY viwPerformance.LastModifiedOn,viwPerformance.SmartGoalId DESC)