2010-04-21 88 views
12

我創建了一個查詢,該查詢在某個指定位置進行數據庫備份。 我想將它用作存儲過程,但這應該充當全局存儲過程,以便每當調用此SP時。然後進行數據庫備份。是否有可能在Sql服務器級別創建全局存儲過程

它使用DB_Name()獲取所有者數據庫的數據庫備份。

是否可以創建任何這樣的SP或函數。

我使用SQL Server 2005

回答

15

第一個解決方案:

如果在主數據庫中創建您的SP和其標記爲系統對象,並用「以sp_」,然後以單拷貝前綴它將存在,將被所有數據庫共享。從MSDN

第二溶液

私人和全局臨時存儲過程,類似於臨時表,可以用#並添加到程序名##的前綴來創建。 #表示本地臨時存儲過程; ##表示全局臨時存儲過程。這些過程在SQL Server關閉後不存在。

一個例子:

USE master 
    CREATE TABLE test (c1 VARCHAR(50)) 
    INSERT test VALUES('master') 
    go 
    CREATE PROC sp_test AS 
    SELECT * FROM test 
    GO 

USE northwind 
    CREATE TABLE test (c1 VARCHAR(50)) 
    INSERT test VALUES('northwind') 

USE pubs 
    CREATE TABLE test(c1 VARCHAR(50)) 
    INSERT test VALUES('pubs') 

USE pubs 
    EXEC sp_test --returns 'master' 

USE master 
    EXEC sp_MS_marksystemobject sp_test 

USE pubs 
    EXEC sp_test --returns 'pubs' 

USE northwind 
    EXEC sp_test --returns 'northwind' 
+0

@masoud THX的幫助,你可以提供如何將其標記爲一個小的語法系統對象 – 2010-04-21 07:17:16

+0

@masoud:我想要持久的全局存儲過程。你能提供創建語法嗎? – 2010-04-21 07:23:07

+0

@Shantanu:第一個解決方案是持續的,但第二個解決方案不是。 – 2010-04-21 07:25:39

4

三個步驟必須遵循創建一個「系統」存儲過程,它可以訪問到服務器上的所有數據庫,以及能的上下文中運行當前數據庫被調用時。

  1. 主數據庫 - 存儲過程應在主數據庫
  2. 前綴存儲過程創建 - 存儲過程的名稱應與以sp_
  3. 馬克SP作爲系統對象前綴 - 致電sp_ms_marksystemobject將自定義SP標記爲系統對象

示例代碼下面

--Step 1, Create in master database 
USE master 
GO 

--Step 2, Prefix with sp_ the custom proc 
CREATE PROCEDURE sp_myCustomSystemProc 
AS 
BEGIN 
    PRINT 'myCustomCode' 
END 
GO 

--Step 3, Mark as system object so proc executes in context of current db 
EXEC sp_ms_marksystemobject 'sp_myCustomSystemProc' 
GO 
1

存在用於這樣的存儲過程

  1. 存儲過程必須在主數據庫中創建3要求。
  2. 存儲過程的名稱必須以「sp_」開頭。
  3. 存儲過程必須標記爲系統對象。

- 2 - 1.在主數據庫

USE master 
GO 

創建過程。與前綴以sp_

CREATE PROCEDURE sp_[Stored_Procedure_Name] 
AS 
BEGIN 
    -- Insert the logic of your stored procedure here 
END 
GO 

創建過程 - 3.標記存儲過程作爲一個系統對象

EXEC sys.sp_MS_marksystemobject sp_[Stored_Procedure_Name] 
相關問題