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

Источник: t-sql

В очередной раз на форуме встретил вопрос: "Создание системной функции в 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

01.USE mssqlsystemresource
02.GO
03. 
04.-- Включаем возможность изменения данный в БД Resource
05.ALTER DATABASE mssqlsystemresource SET READ_WRITE
06.GO
07. 
08.-- Ваша функция
09.CREATE FUNCTION dbo.fn_MyFunction()
10.RETURNS NVARCHAR(255)
11.AS
12.BEGIN
13.RETURN @@VERSION
14.END
15.GO
16. 
17.-- Публикуем во все БД
18.EXEC sys.sp_SetPublicInterfaceObject 'fn_MyFunction'
19.GO
20. 
21.-- Возвращаем БД Resource в режим "только чтение"
22.ALTER DATABASE mssqlsystemresource SET READ_ONLY
23.GO

4) Перестартовываем наш SQL Server в обычном режиме

5) Пользуемся нашей-системной функцией в контексте любой БД

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


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=22766