我正在使用SQL Server 2012网络版中的一大组存储过程(~300),我需要在不同时间启用/禁用某些存储过程。
有没有办法在SQL Server Management Studio的“可编程性”下创建一个子文件夹来放置非活动存储过程?如果没有,是否有一个选项来启用/禁用特定存储过程而不从数据库中删除它?由于我经常需要启用/禁用,我宁愿不删除该过程,然后在需要时重新编写脚本?
答案 0 :(得分:4)
在单独的模式中创建这些存储过程(使用CREATE SCHEMA
),然后对该模式中的所有存储过程执行GRANT或REVOKE执行权限。
答案 1 :(得分:1)
作为建议,您可以在命名方面签订合同,例如spTest
已启用且spTest_Disabled
与已禁用的相同,因此您可以使用此sugnature spChangeSpStatus(spName,state)
编写另一个storedprocedue此sp使用sp_rename
将过程重命名为新过程(我的意思是在其名称中添加_disabled
或从名称中删除_disabled
)
我希望这会有所帮助
答案 2 :(得分:1)
您无法创建子文件夹,但可以创建另一个架构。将其命名为您喜欢的任何名称(例如inactive
),并相应地设置权限。
然后编写一个脚本将对象从工作架构(比如dbo
)移动到inactive
:
alter schema inactive transfer dbo.proc
答案 3 :(得分:1)
有一种名为SQLTreeo的廉价工具,允许您在对象资源管理器中创建文件夹。如果我没记错的话,有两种操作模式,一种允许每个使用该工具的用户拥有其各自的文件夹结构,另一种操作模式结构出现在安装了SQLTreeo的所有机器上。
答案 4 :(得分:0)
创建一个新表来管理你的SP,并且在每个SP中只添加一个IF,它总是要求创建的表dbo.ManagerSP如果sp是Active = true,如果是,则运行SP,如果没有, ,而不是运行,
有了控制权,你所有的SP只需要在dbo.ManagerSP中运行一个活动状态的更新