13 Stimmen

Ist es möglich, eine globale gespeicherte Prozedur auf Sql-Server-Ebene zu erstellen?

Ich habe eine Abfrage erstellt, die eine Datenbanksicherung an einem bestimmten Ort erstellt. Ich möchte es als eine gespeicherte Prozedur verwenden, aber dies sollte als eine globale gespeicherte Prozedur handeln, so dass, wann immer diese SP aufgerufen wird. Dann wird eine Datenbanksicherung erstellt.

Es verwendet DB_Name(), um eine Datenbanksicherung der Eigentümerdatenbank zu erstellen.

Ist es möglich, eine solche SP oder Funktion zu erstellen.

Ich verwende Sql Server 2005

18voto

masoud ramezani Punkte 21062

erste Lösung:

Wenn Sie Ihr sp in der Master-Datenbank erstellen, es als Systemobjekt kennzeichnen und ihm das Präfix "sp_" voranstellen, existiert eine einzige Kopie, die von allen Datenbanken gemeinsam genutzt wird.

y zweite Lösung von msdn:

Private und globale temporäre gespeicherte Prozeduren, analog zu temporären Tabellen, können mit den Präfixen # und ## erstellt werden, die dem Prozedurnamen hinzugefügt werden. # bezeichnet eine lokale temporäre Stored Procedure; ## bezeichnet eine globale temporäre Stored Procedure. Diese Prozeduren existieren nicht mehr, nachdem SQL Server heruntergefahren wurde.

ein Beispiel:

    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'

7voto

CodeCowboyOrg Punkte 2663

Drei Schritte müssen befolgt werden, um eine "System"-Speicherprozedur zu erstellen, die für alle Datenbanken auf dem Server zugänglich ist und im Kontext der aktuellen Datenbank ausgeführt werden kann, wenn sie aufgerufen wird.

  1. Master-Datenbank - Die gespeicherte Prozedur sollte in der Master-Datenbank erstellt werden
  2. Präfix Gespeicherte Prozedur - Der Name der gespeicherten Prozedur sollte mit dem Präfix sp_
  3. SP als Systemobjekt markieren - Anrufen sp_ms_marksystemobject um benutzerdefinierte SP als Systemobjekt zu markieren

Untenstehender Beispielcode

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

1voto

Munavvar Punkte 772

Es gibt 3 Voraussetzungen für eine solche gespeicherte Prozedur

  1. Die Stored Procedure muss in der Master-Datenbank erstellt werden.
  2. Der Name der gespeicherten Prozedur muss mit "sp_" beginnen.
  3. Die gespeicherte Prozedur muss als Systemobjekt gekennzeichnet sein.

-- 1. die Prozedur in der Master-Datenbank erstellen

USE master
GO

-- 2. die Prozedur mit dem Präfix sp_ erstellen

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

-- 3. die gespeicherte Prozedur als Systemobjekt markieren

EXEC sys.sp_MS_marksystemobject sp_[Stored_Procedure_Name]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X