Sql-Server

如何備份儲存過程的目前程式碼及其權限?

  • April 2, 2016

在測試、開發和生產環境中,我經常收到更改儲存過程的請求。

我想要一種簡單的方法來將儲存過程的目前程式碼在更改之前保存到我的“ tablebackups ”數據庫中的一個表中 - 這是一個我在更新或刪除記錄之前保存記錄的數據庫。

我正在考慮這樣的事情:

sp_helptext 'sp_myprocedure'

使用的想法是這樣的:

select * into tablebackups.dbo.my_procedure_20150827_1220
from ss_save_my_procedure 'my_procedure'

有人已經為此開發了解決方案嗎?

您可以使用 sys.sql_modules ( MSDN ):

select top 10 * from sys.sql_modules as m
inner join sys.procedures as p on m.object_id = p.object_id
where p.name ...

最好更改它們,因為您不必擔心現有權限。如果您刪除並創建該過程,則必須將它們重新設置。

  • DO:如果不存在,則創建空的虛擬 SP,然後更改 SP
  • 不要做:如果存在,刪除 SP 然後創建新的 SP

此查詢應該使您具有權限的正確方向:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
   , 'Type' = per.state_desc, 'Permission' = per.permission_name
   , 'Login' = pri.name, 'Type' = pri.type_desc 
   , *
From sys.procedures as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where ...

引用自:https://dba.stackexchange.com/questions/112393