有这样一个场景,要把一段SQL Script发布到多个产品服务器,并且必须保证这段Script可以重复执行。最自然的想法当然是在数据库中放置一个标记,根据这个标记来决定判断是否 是首次执行。问题在于把这个标记放到哪里,在应用数据库某个表中新增记录?显然不是个好主意!我想到的比较好的方法是,借用sysproperties表 来帮我们存储这个标记。见下面的范例:
SET XACT_ABORT ON
GO
IF NOT EXISTS(SELECT * FROM ::fn_listextendedproperty ('FLAG', 'USER', 'dbo', 'TABLE', 'TABLE_NAME', default, default))
BEGIN
BEGIN TRAN
Sql statements
....
EXEC sp_addextendedproperty 'FLAG', 'Y', 'USER', dbo, 'TABLE', TABLE_NAME --Add done flag
COMMIT TRAN
END
SET XACT_ABORT OFF
关于sysproperties和::fn_listextendedproperty的说明可以参考SQLServer的在线文档。