проблема при вставке данных в таблицу в формате 24-073110-XX ????

В этом конкретном случае для запуска задачи требуется viewModel и уведомлять представление о его завершении. «Асинхронное свойство», а не «асинхронный конструктор», находится в порядке.

Я только что выпустил AsyncMVVM , который решает именно эту проблему (среди прочего). Если вы его используете, ваша ViewModel станет:

public class ViewModel : AsyncBindableBase
{
    public ObservableCollection Data
    {
        get { return Property.Get(GetDataAsync); }
    }

    private Task> GetDataAsync()
    {
        //Get the data asynchronously
    }
}

Как ни странно, Silverlight поддерживается. :)

1
задан John Farrell 9 August 2010 в 03:06
поделиться

2 ответа

Как сказал Роб - не храните весь большой идентификатор в своей таблице - просто сохраните ту часть, которая изменяется - порядковый номер.

Если вам действительно нужен весь идентификатор в таблице, например для его отображения вы можете использовать вычисляемый столбец:

ALTER TABLE dbo.MyTable
  ADD DisplayID AS '24-073110-' + RIGHT('00' + CAST(ID AS VARCHAR(2)), 2) PERSISTED

Таким образом, ваш INT IDENTITY будет использоваться как INT и всегда будет содержать числовое значение, и оно будет автоматически увеличиваться SQL Server.

Ваше поле DisplayID затем будет содержать такие значения, как:

ID  DisplayID
 1  24-073110-01
 2  24-073110-02

12  24-073110-12
13  24-073110-03

21  24-073110-21

Поскольку это постоянное поле, оно теперь является частью вашей таблицы, и вы можете запрашивать по нему и даже помещать в него индекс, чтобы запросы быстрее:

SELECT (fields) FROM dbo.MyTable WHERE DisplayID = '24-073110-59'

Обновление:

  • Я бы определенно не использовал DisplayID в качестве первичного ключа - для этого отлично подходит столбец ID IDENTITY

  • ​​для создания индекса для DisplayID на самом деле не отличается от создания индекса для любого другого столбца в вашей таблице:

     СОЗДАТЬ НЕКЛЮЧЕНЫЙ ИНДЕКС SomeIndex ON dbo.MyTable (DisplayID)
    
1
ответ дан 2 September 2019 в 22:21
поделиться

Если часть данных 24-073110- всегда будет одинаковой, хранить ее в базе данных практически нет смысла. Учитывая, что вы сказали, что компонент XX - это числовое значение, которое увеличивается на единицу, я бы предложил создать вашу таблицу аналогично этому:

CREATE TABLE [dbo].[MyTable]
(
  MyTableId INT IDENTITY(1,1) NOT NULL,
  /*
      Other columns go here
  */
)

Таким образом, вы можете позволить базе данных беспокоиться о вставка уникальных автоматически увеличивающихся значений для вашего первичного ключа.

1
ответ дан 2 September 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: