Создание системной функции в MS SQL Server 2008

by Admin 5. июня 2009 19:26

В очередной раз на форуме встретил вопрос: "Создание системной функции в MS SQL Server 2008".

Как известно, в SQL Server 2000 эта задача решалась достаточно легко и без малой крови (How to Write Your Own System Functions).

Но как всё-таки решить подобную задачу на SQL Server 2005/2008? Если верить официальным источникам, то никак. Но...есть способ

Внимание!!!

не рекомендую им пользоваться!!!

 

  1. Останавливаем наш SQL Server
  2. Запускаем его в монопольном режиме (с флагом -m): cd Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLBinn sqlservr.exe -m
  3. Создаём нашу функцию в системной БД (скрытой в обычном режиме работы SQL Server`а) mssqlsystemresource
  4.  

    USE mssqlsystemresource
    GO
    
    -- Включаем возможность изменения данный в БД Resource
    ALTER DATABASE mssqlsystemresource SET READ_WRITE
    GO
    
    -- Ваша функция
    CREATE FUNCTION dbo.fn_MyFunction()
    RETURNS NVARCHAR(255)
    AS
    BEGIN
    RETURN @@VERSION
    END
    GO
    
    -- Публикуем во все БД
    EXEC sys.sp_SetPublicInterfaceObject 'fn_MyFunction'
    GO
    
    -- Возвращаем БД Resource в режим "только чтение"
    ALTER DATABASE mssqlsystemresource SET READ_ONLY
    GO

  5. Перестартовываем наш SQL Server в обычном режиме
  6. Пользуемся нашей-системной функцией в контексте любой БД

 

PS: Так как БД mssqlsystemresource хранит все системные объекты, то при установке очередного SP обновиться вся эта база, соответственно и ваши "системные" функции исчезнут и их придётся создавать заново.

Tags: ,

SQL Server

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading