Я знаю, что это плохо, но я опубликую ответ на свой вопрос ... Спасибо GBN за помощь!
Я сейчас храню "флаги" в поле "описание"мои колонны.Я, например, могу хранить флаг таким образом: «TYPE_2_DATA».
Затем я использую этот запрос, чтобы вернуть флаг для каждого столбца:
select columns.name as [column_name]
,types.name as [type_name]
,extended_properties.value as [column_flags]
from sys.columns
inner join sys.types
on columns.system_type_id = types.system_type_id
left join sys.extended_properties
on extended_properties.major_id = columns.object_id
and extended_properties.minor_id = columns.column_id
and extended_properties.name = 'MS_Description'
where object_id = ( select id from sys.sysobjects where name = 'DimDivision' )
and is_identity = 0
order by column_id
Теперь я могу хранить метаданные о столбцах без необходимости создания отдельной таблицы.Я использую то, что уже есть, и я не повторяюсь.Я не уверен, что это лучшее из возможных решений, но оно работает и намного лучше, чем дублирование информации.
В будущем я смогу использовать это поле для хранения дополнительных метаданных, где:"TYPE_2_DATA | ANOTHER_FLAG | ETC | OH BOY!".
ОБНОВЛЕНИЕ:
Теперь я храню информацию в отдельных расширенных свойствах.Вы можете управлять расширенными свойствами, используя хранимые процедуры sp_addextendedproperty
и sp_updateextendedproperty
.Я создал простую процедуру хранения, которая помогает мне обновлять эти значения независимо от того, существуют они в настоящее время или нет:
create procedure [dbo].[UpdateSCDType]
@tablename nvarchar(50),
@fieldname nvarchar(50),
@scdtype char(1),
@dbschema nvarchar(25) = 'dbo'
as
begin
declare @already_exists int;
if ( @scdtype = '1' or @scdtype = '2' )
begin
select @already_exists = count(1)
from sys.columns
inner join sys.extended_properties
on extended_properties.major_id = columns.object_id
and extended_properties.minor_id = columns.column_id
and extended_properties.name = 'ScdType'
where object_id = (select sysobjects.id from sys.sysobjects where sysobjects.name = @tablename)
and columns.name = @fieldname
if ( @already_exists = 0 )
begin
exec sys.sp_addextendedproperty
@name = N'Scd_Type',
@value = @scdtype,
@level0type = N'SCHEMA',
@level0name = @dbschema,
@level1type = N'TABLE',
@level1name = @tablename,
@level2type = N'COLUMN',
@level2name = @fieldname
end
else
begin
exec sys.sp_updateextendedproperty
@name = N'Scd_Type',
@value = @scdtype,
@level0type = N'SCHEMA',
@level0name = @dbschema,
@level1type = N'TABLE',
@level1name = @tablename,
@level2type = N'COLUMN',
@level2name = @fieldname
end
end
end
Еще раз спасибо