Добавить column2 перед column1 - PullRequest
2 голосов
/ 19 июля 2009

У меня есть структура таблицы с 3 столбцами (столбец1, столбец2, столбец3), и я хочу поставить еще один столбец с оператором SQL, как:

alter table tbl_name add column4 

но мне нужно поместить его между column1 и column2

Могу ли я сделать что-то вроде в MYSQL:

alter table tbl_name add column4 after column1

Ответы [ 4 ]

1 голос
/ 20 июля 2009

в SQL Server 2005 вы можете сохранить сценарий изменения таблиц изменений, поэтому, например, я создал тестовую таблицу с col1, col2 и col3. Затем добавили col4 между col1 и col2. Я сохранил сценарии изменений, и это было сгенерировано.

Посмотрите

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_zzzzzzzz
    (
    col1 nchar(10) NULL,
    col4 nchar(10) NULL,
    col2 nchar(10) NULL,
    col3 nchar(10) NULL
    )  ON [PRIMARY]
GO
IF EXISTS(SELECT * FROM dbo.zzzzzzzz)
     EXEC('INSERT INTO dbo.Tmp_zzzzzzzz (col1, col2, col3)
        SELECT col1, col2, col3 FROM dbo.zzzzzzzz WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.zzzzzzzz
GO
EXECUTE sp_rename N'dbo.Tmp_zzzzzzzz', N'zzzzzzzz', 'OBJECT' 
GO
COMMIT

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

1 голос
/ 19 июля 2009

@ bdukes правильно. По сути, это то, что делает SSMS, когда вы добавляете столбец в любое место, кроме последней позиции таблицы. Вы можете, однако, достичь чего-то подобного, используя представления. То есть просто добавьте свой столбец в конец таблицы, а затем создайте представление, столбцы которого расположены в другом порядке. Используйте представление вместо фактической таблицы. Я предлагаю это только в качестве альтернативы, которая может быть полезна в определенных ситуациях. Я не обязательно рекомендую это для вашей ситуации. Обычно я использую конструктор в SSMS, и у меня не было проблем с обновлением таблиц при вставке столбца. Резервные копии, конечно, ваш друг!

1 голос
/ 19 июля 2009

Более фундаментальный вопрос: почему вы хотите это сделать? Кроме отображения по умолчанию столбцов в диспетчере SQL Enterprise, порядок столбцов не имеет значения. Вы можете упорядочить вывод столбцов с помощью SQL-запроса любым способом, независимо от того, как столбцы «упорядочены» внутри базы данных.

Фактически, с академической точки зрения, одно из основных свойств СУБД «Отношение» (академическое название таблицы) заключается в том, что «атрибуты» (столбцы) отношения неупорядочены.

Это не значит, что желать, чтобы порядок «по умолчанию» был определенным образом, не является достаточной причиной ... Я часто отбрасываю и воссоздаю таблицы именно по этой причине ... Но просто понимаю, что порядок не имеет значения для всего остального.

1 голос
/ 19 июля 2009

Я не думаю, что SQL Server позволяет вам делать что-то подобное. Если вы хотите поместить столбец посередине, вам нужно создать новую таблицу с нужным макетом, перенести данные, удалить старую таблицу и переименовать новую таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...