代码之家  ›  专栏  ›  技术社区  ›  Shantanu Gupta

是否可以在SQL Server级别创建全局存储过程

  •  13
  • Shantanu Gupta  · 技术社区  · 15 年前

    我创建了一个查询,在指定的位置进行数据库备份。 我想把它用作一个存储过程,但它应该作为一个全局存储过程,这样每当调用这个sp时。然后进行数据库备份。

    它使用db_name()对所有者数据库进行数据库备份。

    是否可以创建任何此类SP或函数。

    我正在使用SQL Server 2005

    3 回复  |  直到 9 年前
        1
  •  17
  •   masoud ramezani    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' 
    
        2
  •  4
  •   CodeCowboyOrg    10 年前

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

    1. 主数据库 -应在主数据库中创建存储过程
    2. 前缀存储过程 -存储过程名称的前缀应为 SPY
    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
    
        3
  •  1
  •   Munavvar Drewness    9 年前

    这种存储过程有3个要求

    1. 存储过程必须在主数据库中创建。
    2. 存储过程的名称必须以sp_u开头。
    3. 存储过程必须标记为系统对象。

    ——1。在主数据库中创建过程

    USE master
    GO
    

    ——2。创建前缀为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]