InsertColumn (SQLDMO)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

InsertColumn (SQLDMO)

Сообщение Andrey Fedorov » 14.09.2005 (Ср) 9:06

Пытаюсь вставить колонку oClNew в таблицу на нужную позицию (перед колонкой oCl):

Код: Выделить всё
oTb.InsertColumn oClNew, oCl.Name


Получаю сообщение об ошибке:

Inserting new ones prior to end of table not supported


В чем тут дело - кто может сказать?

P.S По
Код: Выделить всё
oTb.Columns.Add oClNew


эта колонка прекрасно вставляется, но хочется именно на нужную позицию...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 14.09.2005 (Ср) 10:27

Небось в существующую таблицу вставляешь?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.09.2005 (Ср) 10:49

Gloom писал(а):Небось в существующую таблицу вставляешь?


Вообще-то да... В существующую нельзя?

А код для получения скрипта вставки колонки, навроде того который делает EM, есть где нибудь? Ибо очень хочется...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 14.09.2005 (Ср) 10:53

Открой ЕМ, открой дизайн таблицы, перемести столбец в другое положение и нажми кнопку Save change script на тулбаре. Он тебе покажет, как именно он будет это делать. Что-то я сомневаюсь, что тебе нужен такой геморрой...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.09.2005 (Ср) 11:00

Ennor писал(а):Открой ЕМ, открой дизайн таблицы, перемести столбец в другое положение и нажми кнопку Save change script на тулбаре. Он тебе покажет, как именно он будет это делать.


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

Ennor писал(а):Что-то я сомневаюсь, что тебе нужен такой геморрой...


Нужен, нужен - для одной утилиты. Все остальное в ней уже практически сделано, но хочется чтобы усе было красиво и колонка ставиласть именно туда куда нужно...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 14.09.2005 (Ср) 14:51

Эх... Ну, если тебя не напряжет прямое редактирование системных таблиц, то вот так (скрипт применим к MSSQL 7 / 2000 и требует прав serveradmin как минимум):
Код: Выделить всё
declare @Id int, @colname sysname, @newpos int

-- Init with some values
select @id = object_id('MyTable'),
  @colname = 'NewColumn',
  @newpos = 3

-- Shift all subsequent columns to make room
update syscolumns
set colorder = colorder + 1
where id = @id
and colorder >= @newpos

-- Move specified column to new position
update syscolumns
set colorder = @newpos
where id = @id
  and name = @colname

Предупреждаю сразу: скрипт не универсален и будет работать только для случая перемещения из конца в середину. Произвольный сдвиг меня писать ломает, но он будет ненамного сложнее. Далее, скорее всего, он будет некорректно работать в Юконе - кажется, там поменяли эту часть модели. Ну и последнее: признаюсь честно, у меня не хватило духу тестить его на реальной БД.

Как включить режим редактирования системных объектов, полагаю, в курсе.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.09.2005 (Ср) 15:49

Ennor писал(а):Ну и последнее: признаюсь честно, у меня не хватило духу тестить его на реальной БД.


Ну я попробовал на тестовой из интереса, хотя меня он и дико смущал - предполагал в базе при этом много чего поедет...

В общем, на порядок влияет не colorder, а colid - если его подставить в твой код, то поле перемещается. Но к этому полю остаются привязаны (по colid), например, индексы поля (ну и остальное тоже) на место которого оно переместилось. В общем как и предполагалось таким образом получается каша...

А смена colorder никакого видимого эффекта не дала (по крайней мере я его не увидел).

Так что похоже решается только пересозданием таблицы, но вот как корректно это сделать или хотя бы сформировать скрипт для этого дела пока не ясно... По крайней мере простого решения похоже не существует
:cry:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList