我使用 sql server 2008 r2 dmvs 和 dmfs 创建了一个监控工具。我通过 tsql 为它创建了一个 sql server 作业,通过 9 个步骤将其部署到客户端站点。
我的问题是找到一种方法以某种方式包含与作业一起存储的版本,以便我知道何时升级作业以进行下一次部署。任何想法如何做到这一点?
提前致谢!
我使用 sql server 2008 r2 dmvs 和 dmfs 创建了一个监控工具。我通过 tsql 为它创建了一个 sql server 作业,通过 9 个步骤将其部署到客户端站点。
我的问题是找到一种方法以某种方式包含与作业一起存储的版本,以便我知道何时升级作业以进行下一次部署。任何想法如何做到这一点?
提前致谢!
您可以像这样向数据库对象添加自定义属性:
EXEC sp_addextendedproperty
N'YourProperyName', N'SomeValue',
N'SCHEMA', N'dbo',
N'TABLE', N'MyTable'
但我不知道它是否适用于工作。或者也许使用工作的描述字段:
select top 10 * from msdb.dbo.sysjobs
您可以使用 sp_addextendedproperty 对 msdb.dbo.sysjobs 表或列进行版本化(例如 version_number);但是,您不能对特定记录执行此操作。由于扩展属性值的 TYPE 是 SQLVARIANT,您可以将 XML 存储在 msdb.dbo.sysjobs 表中,描述所有作业的版本。
或者您可以简单地在您的数据库中创建一个表并存储 job_id (GUID) 和您当前的版本号 - 一个自定义解决方案。
值得一提的是,这里是您如何使用 sp_addextendedproperty 在 sysjobs 表上添加、查看、更新和删除扩展属性的方法。我去了 COLUMN,但你可以在桌子上停下来:
--Add the 'Version' extended property to msdb.dbo.sysjobs.[version_number] column.
EXECUTE sp_addextendedproperty N'Version', '1.0.0.0', 'SCHEMA', N'dbo', 'TABLE', N'sysjobs', 'COLUMN', N'version_number';
--Update the 'Version' extended property
EXECUTE sp_updateextendedproperty N'Version', '1.0.0.2', 'SCHEMA', N'dbo', 'TABLE', N'sysjobs', 'COLUMN', N'version_number';
--View the current value of 'Version'
SELECT objtype, objname, name, value
FROM fn_listextendedproperty(N'Version', 'SCHEMA', N'dbo', 'TABLE', N'sysjobs', 'COLUMN', N'version_number');
--Drop the 'Version' extended property
EXECUTE sp_dropextendedproperty N'Version', 'SCHEMA', N'dbo', 'TABLE', N'sysjobs', 'COLUMN', N'version_number';
您不能使用 sp_addextendedproperty 在作业中保存版本号
[@level1type=]{'level1_object_type'}
是级别 1 对象的类型。level1_object_type 是 varchar(128),默认为 NULL。有效输入为 AGGREGATE、DEFAULT、FUNCTION、LOGICAL FILE NAME、PROCEDURE、QUEUE、RULE、SYNONYM、TABLE、TABLE_TYPE、TYPE、VIEW、XML SCHEMA COLLECTION 和 NULL。资源
这样做需要将“level1_object_type”的值更改为“JOB”,这不是一个选项。