2014-01-15 3 views
1

Я вставляю данные через определенный пользователем тип таблицы, и я возвращаю вставленные значения идентичности в неправильном порядке.Неверный порядок значений 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 

А вот 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, либо просто .sort список 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

отлично болен только сортировать окончательный результат –

Смежные вопросы