我創建了一個查詢,該查詢在某個指定位置進行數據庫備份。 我想將它用作存儲過程,但這應該充當全局存儲過程,以便每當調用此SP時。然後進行數據庫備份。是否有可能在Sql服務器級別創建全局存儲過程
它使用DB_Name()獲取所有者數據庫的數據庫備份。
是否可以創建任何這樣的SP或函數。
我使用SQL Server 2005
我創建了一個查詢,該查詢在某個指定位置進行數據庫備份。 我想將它用作存儲過程,但這應該充當全局存儲過程,以便每當調用此SP時。然後進行數據庫備份。是否有可能在Sql服務器級別創建全局存儲過程
它使用DB_Name()獲取所有者數據庫的數據庫備份。
是否可以創建任何這樣的SP或函數。
我使用SQL Server 2005
第一個解決方案:
如果在主數據庫中創建您的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'
三個步驟必須遵循創建一個「系統」存儲過程,它可以訪問到服務器上的所有數據庫,以及能的上下文中運行當前數據庫被調用時。
示例代碼下面
--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
存在用於這樣的存儲過程
- 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]
@masoud THX的幫助,你可以提供如何將其標記爲一個小的語法系統對象 – 2010-04-21 07:17:16
@masoud:我想要持久的全局存儲過程。你能提供創建語法嗎? – 2010-04-21 07:23:07
@Shantanu:第一個解決方案是持續的,但第二個解決方案不是。 – 2010-04-21 07:25:39