3

に関する非常に孤立した問題に直面していdynamic sql queryます。1 つの で 2 つのクエリを実行してい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

そして 2 番目のクエリ (ここでは、上記のクエリの 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」が 2 番目のクエリ結果に含まれてはならないことは正しいことです。

したがって、私の主なポイントは、最初のクエリと同じであるため、2 番目のクエリで異なる結果が得られる理由です。

注:Stuff関数が値を逆にし、正しい順序で与えていないというのは正しいですか。

4

1 に答える 1