powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 15 создание столбцов в таблице
5 сообщений из 5, страница 1 из 1
Sybase ASE 15 создание столбцов в таблице
    #36739882
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем времени суток.

Думаю все сталкивались с необходимостью изменять структуру таблиц (апдейт базы).
При расширении полей в таблице можем натолкнуться на ситуацию, когда такое поле уже есть. Само собой проверка по типу
Код: 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
Sybase ASE 15 создание столбцов в таблице
    #36740121
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83
С двумя первыми параметрами все понятно, а вот третий - тип данных вызвал у меня небольшой ступор.

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

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

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

В этом разрезе вариант с текстовым наименованием типа данных выглядит уже более привлекательно :) - проверять наличие такого типа в базе и все.
...
Рейтинг: 0 / 0
Sybase ASE 15 создание столбцов в таблице
    #36741279
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В результате родилась такая незатейливая процедура, вдруг кому пригодиться...
Никаких 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
5 сообщений из 5, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE 15 создание столбцов в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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