是否可以在Sql server级别创建全局存储过程

Sha*_*pta 13 sql database sql-server stored-procedures function

我创建了一个在特定指定位置进行数据库备份的查询.我想将它用作存储过程,但这应该充当全局存储过程,以便每当调用此SP时.然后进行数据库备份.

它使用DB_Name()来获取所有者数据库的数据库备份.

是否可以创建任何此类SP或功能.

我正在使用sql server 2005

mas*_*ani 17

第一个解决方

如果在master数据库中创建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' 
Run Code Online (Sandbox Code Playgroud)


Cod*_*Org 7

必须遵循三个步骤来创建一个“系统”存储过程,该存储过程可以被服务器上的所有数据库访问,并且在调用时能够在当前数据库的上下文中运行。

  1. Master 数据库- 应该在 Master 数据库中创建存储过程
  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
Run Code Online (Sandbox Code Playgroud)