我知道這是不好的,但我會發佈一個答案我自己的問題......感謝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