Как изменить порядок столбцов в схеме таблицы SQL Server Compact Edition? - PullRequest
10 голосов
/ 28 апреля 2009

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

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

РЕДАКТИРОВАТЬ: Я знаю, что с чисто технической точки зрения порядок столбцов не имеет значения. Я создаю прототип приложения, поэтому мне нужно несколько раз изменить схему. Если, например, мне нужно изменить первичный ключ, было бы «некрасиво» иметь самый важный столбец в конце. Думаю, другие разработчики, которые смотрят на код, будут сбиты с толку. Это вопрос эстетики.

Ответы [ 3 ]

5 голосов
/ 28 апреля 2009

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

2 голосов
/ 28 апреля 2009

Я согласен с Пакс. Если по конкретной причине вам необходимо вернуть поля в определенном порядке в запросе, просто измените запрос, поместив поле в нужное место.

Если по какой-либо причине вам нужно любой ценой , чтобы переместить это поле, вы можете сделать это с помощью скрипта, подобного следующему, который делает 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

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

0 голосов
/ 22 сентября 2015

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

  1. Удалить все внешние ключи и первичный ключ исходной таблицы
  2. Переименовать исходную таблицу
  3. С помощью CTAS создайте исходную таблицу в нужном вам порядке
  4. Брось старый стол.
  5. Применение всех ограничений обратно к исходной таблице
...