Как изменить порядок столбцов в схеме таблицы SQL Server Compact Edition?

Я использую Visual Studio 2008 для создания базы данных SQL Server Compact Edition (*.sdf). Мне пришлось изменить схему одной из моих таблиц, добавив новый столбец.

Я хочу "переместить" этот новый столбец снизу в другую позицию в списке полей. Как это сделать в дизайнере Visual Studio?

EDIT: Я знаю, что с точки зрения чисто технического зрения порядок столбцов не имеет значения. Я прототипирую приложение, поэтому мне нужно несколько раз изменить схему. Если, например, я должен изменить первичный ключ, он будет "уродливым", имеющим самый важный столбец в конце. Думаю, другие разработчики, которые смотрят на код, будут смущены. Это вопрос эстетики.

Ответ 1

вы не можете просто переместить его в дизайнере. Вам нужно будет создать новый столбец, удалить старый, сгенерировать script и отредактировать script, где он вставляется в таблицу temp из старой таблицы, в результате чего значение старого столбца (в порядке выбора) новый столбец.

Ответ 2

Я согласен с Pax. Если по какой-то причине вам нужно возвращать поля в определенном порядке в вашем запросе, просто измените запрос, поместив поле в том месте, где оно вам нужно.

Если по какой-либо причине вам понадобится любой ценой, чтобы переместить это поле, вы можете сделать это с помощью script, как показано ниже, что делает FIELD3 первым столбцом в таблице, называемой TestTable

/* Original sample table with three fields */
CREATE TABLE [dbo].[TestTable](
    [FIELD1] [nchar](10) NULL,
    [FIELD2] [nchar](10) NULL,
    [FIELD3] [nchar](10) NULL
) ON [PRIMARY]

/* The following script will make FIELD3 the first column */
CREATE TABLE dbo.Tmp_TestTable
    (
    FIELD3 nchar(10) NULL,
    FIELD1 nchar(10) NULL,
    FIELD2 nchar(10) NULL
    )  ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
     EXEC('INSERT INTO dbo.Tmp_TestTable (FIELD3, FIELD1, FIELD2)
        SELECT FIELD3, FIELD1, FIELD2 FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO

DROP TABLE dbo.TestTable
GO

EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
GO

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

Ответ 3

Выполните следующие действия:

  • Удалить все внешние ключи и первичный ключ исходной таблицы
  • Переименование исходной таблицы
  • Использование CTAS создает исходную таблицу в том порядке, в котором вы хотите
  • Отбросьте старую таблицу.
  • Применить все ограничения к исходной таблице