2011-08-25 6 views
0

Мы поместили уникальный идентификатор в расширенные свойства каждой таблицы, который затем считывается некоторыми отчетами. Я бы хотел сделать это на лету, поэтому нам не нужно вводить его вручную. Однако SQL Server 2008 не разрешает специальные обновления для системных каталогов.Обновление метаданных таблицы «на лету»

Как обновить расширенные свойства специальным запросом? Или есть другое место, где я могу хранить метаданные, где их можно легко прочитать отчетами?

Любая помощь очень ценится.

+1

Что вы пытаетесь выполнить, сохранив метаданные, подобные этому? Вероятно, есть лучший способ. – JNK

+0

Мы сохраняем уникальный идентификатор таблицы в метаданных, в основном, чтобы мы знали, что содержит таблица (например, данные от февраля 2011 года). – divided

+0

yikes, вы быстро добавляете/вычитаете/обновляете таблицы? – JNK

ответ

2

Один из вариантов:

Расширенные свойства добавляются с помощью sp_addextendedproperty (есть обновление и падение прок тоже). Однако они требуют расширенных прав.

Таким образом, вы можете обернуть вызовы к этому в другом proc с помощью EXECUTE AS, чтобы увеличить права только на сохраненный процесс.

CREATE PROC dbo.OurMetaDataUpdate 
    @tablename ... 
    @uniqueid ... 
WITH EXECUTE AS OWNER 
AS 
SET NOCOUNT ON 

EXEC sp_addextendedproperty ... 
GO 

Либо это, либо использовать свой собственный стол для его сохранения.

+0

Вместо того чтобы обернуть его в proc, можно ли просто вызвать sp_addextendedproperty (@ name, @ value)? – divided

+0

@divided: для этого требуются достаточно прав для удаления и создания объектов. Это не-нет во многих магазинах, или если вы подчинены SOX/PCI и т. Д. – gbn