Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 15 создание столбцов в таблице / 5 сообщений из 5, страница 1 из 1
14.07.2010, 09:58
    #36739882
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 15 создание столбцов в таблице
Доброго всем времени суток.

Думаю все сталкивались с необходимостью изменять структуру таблиц (апдейт базы).
При расширении полей в таблице можем натолкнуться на ситуацию, когда такое поле уже есть. Само собой проверка по типу
Код: plaintext
1.
2.
3.
4.
5.
6.
if not exists 
	(Select 
		* 
	 from sysobjects SO 
		join syscolumns sc on sc.id = so.id 
	 where so.name = @TableName and sc.Name = @ColumnName
	)

позволяет отследить существование колонки, но скрипт на добавление >10 колонок в таблицу выглядит устрашающе.

Появилась идея вынести создание колонки в таблице в отдельную процедуру, куда будет передаваться: имя таблицы + имя колонки + тип данных.

С двумя первыми параметрами все понятно, а вот третий - тип данных вызвал у меня небольшой ступор.

Как лучше передать в процедуру тип данных? - просто строкой - имхо плохо...
...
Рейтинг: 0 / 0
14.07.2010, 11:06
    #36740121
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 15 создание столбцов в таблице
Mikle83
С двумя первыми параметрами все понятно, а вот третий - тип данных вызвал у меня небольшой ступор.

Как лучше передать в процедуру тип данных? - просто строкой - имхо плохо...

id типа данных?
...
Рейтинг: 0 / 0
14.07.2010, 11:22
    #36740181
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 15 создание столбцов в таблице
В таблице systypes хранятся все известные в БД типы данных - поэтому тип можно задавать числом - значение поля usertype.
Но у некоторых типов есть еще 1 - 2 числовых параметра:
varchar(25)
numeric(12,2)
Их в этом случае придется передавать в процедуру отдельными параметрами.
...
Рейтинг: 0 / 0
14.07.2010, 11:26
    #36740189
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 15 создание столбцов в таблице
golsaВ таблице systypes хранятся все известные в БД типы данных - поэтому тип можно задавать числом - значение поля usertype.
Но у некоторых типов есть еще 1 - 2 числовых параметра:
varchar(25)
numeric(12,2)
Их в этом случае придется передавать в процедуру отдельными параметрами.

Это вариант конечно, но надо закладывать максимальное количество параметров в процедуру + анализировать для каких типов использовать один, для каких два, для каких вообще не использовать...

В этом разрезе вариант с текстовым наименованием типа данных выглядит уже более привлекательно :) - проверять наличие такого типа в базе и все.
...
Рейтинг: 0 / 0
14.07.2010, 16:56
    #36741279
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sybase ASE 15 создание столбцов в таблице
В результате родилась такая незатейливая процедура, вдруг кому пригодиться...
Никаких output параметров пока не предусматривается - результат выполнения только по логу... Но зато позволяет избежать кучи копипастного кода.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Create procedure _DB_TableColumn_Create
	@TableName varchar( 100 ),
	@ColumnName varchar( 100 ), 
	@DataType varchar( 100 )
as
begin
	Declare @SQLText varchar( 1000 )
	if not exists (Select * from sysobjects so where name = @TableName)
	begin
		Set @SQLText = 'Table [' + @TableName + '] not exists'
		print @SQLText
		return
	end 
               if not exists (Select * from systypes where @DataType like name +'%')
	begin
		Set @SQLText = 'DataType [' + @DataType + '] not exists'
		print @SQLText
		return
	end 


	if exists 
	(Select 
		* 
	 from sysobjects so
		join syscolumns sc on sc.id = so.id 
	 where so.name = @TableName and sc.name = @ColumnName
	)
	begin
		Set @SQLText = 'Columnn by name [' + @ColumnName + '] allready exists in table [' + @TableName + ']'
		print @SQLText
		return
	end

	Set @SQLText = 'Columnn by name [' + @ColumnName + '] add to table [' + @TableName + ']...'	
	print @SQLText
	Set @SQLText = 'alter table ' + @TableName + ' add ' + @ColumnName + ' ' + @DataType + ' Null'
	EXEC (@SQLText)
	print '...Success'
end
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 15 создание столбцов в таблице / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]