В очередной раз на форуме встретил вопрос: "Создание системной функции в 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.
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.
22.ALTER DATABASE mssqlsystemresource SET READ_ONLY
23.GO
4) Перестартовываем наш SQL Server в обычном режиме
5) Пользуемся нашей-системной функцией в контексте любой БД
PS: Так как БД mssqlsystemresource хранит все системные объекты, то при установке очередного SP обновиться вся эта база, соответственно и ваши "системные" функции исчезнут и их придётся создавать заново.
Ссылки по теме