我知道这是不好的,但我会发布一个答案我自己的问题......感谢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
再次感谢
是绝对正确的。您应该使用ANSI标准的information_schema视图,并且可以在其他数据库平台(SQL Server,Oracle,MySql等)中找到它们。很有用。 – scarpacci
我同意你的意见。但是我的列在我的ETL中作为类型1或类型2数据处理的信息不能存储在那里。或者它可以吗? –
使用该信息在信息之上创建视图,然后利用该视图。 – scarpacci