Можно ли создать глобальную хранимую процедуру на уровне сервера Sql? - PullRequest
13 голосов
/ 21 апреля 2010

Я создал запрос, который берет резервную копию базы данных в определенном указанном месте. Я хочу использовать его как хранимую процедуру, но она должна действовать как глобальная хранимая процедура, чтобы всякий раз, когда вызывался этот SP Затем выполняется резервное копирование базы данных.

Он использует DB_Name () для создания резервной копии базы данных владельца.

Можно ли создать любой такой SP или функцию.

Я использую SQL Server 2005

Ответы [ 3 ]

17 голосов
/ 21 апреля 2010

первое решение:

Если вы создадите свой sp в базе данных master, отметите его как системный объект и добавите префикс «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' 
4 голосов
/ 08 августа 2014

Необходимо выполнить три шага, чтобы создать «системную» хранимую процедуру, которая будет доступна всем базам данных на Сервере, а также будет иметь возможность запускаться в контексте текущей базы данных при ее вызове.

  1. Основная база данных - Хранимая процедура должна быть создана в основной базе данных
  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
1 голос
/ 30 мая 2016

Есть 3 требования для такой хранимой процедуры

  1. Хранимая процедура должна быть создана в базе данных master.
  2. Имя хранимой процедуры должно начинаться с «sp _».
  3. Хранимая процедура должна быть помечена как системный объект.

- 1. Создайте процедуру в базе данных master

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...