2014-01-15 6 views
1

사용자 정의 테이블 형식을 통해 데이터를 삽입하는 중입니다. 삽입 된 ID 값이 잘못된 순서로 반환됩니다. 여기 IDENTITY 값의 순서가 잘못되었습니다.

는 저장 프로 시저입니다 :

CREATE PROCEDURE [dbo].[InsertBulkAgency](
    @AgencyHeaders As AgencyType READONLY) 
AS 
BEGIN 
    insert into [Agency] 
    output Inserted.Id 
    select *,'cm',GETDATE(),'comp',GETDATE() from @AgencyHeaders 
END 

그리고 여기에 ID 값 저장하는 C# 코드입니다 : 순차적해야 목록에

using (SqlCommand cmd = new SqlCommand("InsertBulkAgency", myConnection)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 

       cmd.Parameters.Add("@AgencyHeaders", SqlDbType.Structured).Value = dt; 

       myConnection.Open(); 
       rdr = cmd.ExecuteReader(); 
       while (rdr.Read()) 
       { 
        sample.Add(rdr["Id"].ToString()); 
       } 
       myConnection.Close(); 

      } 

반환 값을하지만 그들은 완전히 무작위 . 삽입 된 값의 올바른 순서를 다시 검색하려면 어떻게합니까?

+0

쿼리에'ORDER BY' 절을 추가하거나 C# 목록을 그냥 정렬하십시오. – Scotch

답변

3

ORDER BY을 추가하셨습니까?

insert into dbo.[Agency] 
output inserted.Id 
select *,'cm',GETDATE(),'comp',GETDATE() from @AgencyHeaders 
ORDER BY inserted.Id; 

또는 .sort()을 사용하면 애플리케이션에 다시 데이터가 저장됩니다.

ORDER BY이없는 경우 SQL Server에서 특정 주문을하지 않아야합니다. "나에게이 세트를 줘"라고 말한 경우 목록의 값이 순차적 인 순서로 표시되어야하는 이유는 무엇입니까? SQL Server가 특정 방식으로 정렬되도록 예측해야하는 이유는 무엇입니까? 그리고 데이터 정렬을 원한다고 가정한다면, 주문할 이름이나 다른 열을 선택하지 않는 이유는 무엇입니까? 진실은, SQL Server는 당신이 효과적으로 신경 쓰지 않는다면 가장 명확하다고 생각하는 정렬 순서를 고를 것입니다. 지정하지 않아도됩니다.

또한 Id를 문자열로 변환하는 이유는 무엇입니까 ('55' < '9'부터 정렬에 문제가 있음)? 나는 당신의리스트가 숫자가 아닌 문자열을 사용하도록 권장한다. 그렇지 않으면 이 아니다.은 항상 당신이 기대하는 방식으로 정렬한다.

+0

완벽한 병은 최종 결과를 정렬합니다. –

관련 문제