2010-04-21 15 views
12

Creé una consulta que toma una copia de seguridad de la base de datos en cierta ubicación especificada. Quiero usarlo como un procedimiento almacenado, pero esto debería actuar como un procedimiento almacenado global para que cada vez que se llame a este SP. Luego se toma una copia de seguridad de la base de datos¿Es posible crear un procedimiento almacenado global en el nivel de servidor Sql

Utiliza DB_Name() para realizar una copia de seguridad de la base de datos del propietario.

Es posible crear cualquier SP o función.

estoy usando SQL Server 2005

Respuesta

15

primera solución:

Si crea su sp en la base de datos maestra y la marca como un objeto del sistema y el prefijo con 'sp_', entonces una sola copia existirá que será compartido por todas las bases de datos.

y segunda solución de MSDN:

procedimientos almacenados temporales privadas y globales, de forma análoga a las tablas temporales, se puede crear con el # ## y prefijos añadidos al nombre del procedimiento. # denota un procedimiento almacenado temporal local; ## denota un procedimiento almacenado temporal global. Estos procedimientos no existen después de que SQL Server se apaga.

un ejemplo:

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

THX @masoud en busca de ayuda, ¿Puede proporcionar poca sintaxis de cómo marcarlo como objeto del sistema –

+0

@masoud: quiero un procedimiento almacenado global persistente. ¿Puede proporcionar la sintaxis para eso en la creación –

+0

@ Shantanu: la primera solución es persistente pero la segunda no lo es. –

4

Tres pasos se deben seguir para crear un "sistema" procedimiento almacenado que se puede acceder a todas las bases de datos del servidor, así como ser capaz de ejecutarse en el contexto de la base de datos actual cuando se llama.

  1. Master Database - El procedimiento almacenado se debe crear en la base de datos principal
  2. Prefijo procedimiento almacenado - El nombre del procedimiento almacenado debe tener el prefijo sp_
  3. Marcos SP como objetos del sistema - Llame al sp_ms_marksystemobject para marcar el SP personalizado como un objeto del sistema

Código Ejemplo A continuación

--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

Hay 3 requisito para tal procedimiento almacenado

  1. El procedimiento almacenado se debe crear en la base de datos principal.
  2. El nombre del procedimiento almacenado debe comenzar por "sp_".
  3. El procedimiento almacenado debe marcarse como un objeto del sistema.

- 1. Cree el procedimiento en la base de datos maestra

USE master 
GO 

- 2.Crear el procedimiento con el prefijo sp_

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

- 3. Marque el procedimiento almacenado como un objeto del sistema

EXEC sys.sp_MS_marksystemobject sp_[Stored_Procedure_Name] 
Cuestiones relacionadas