В очередной раз на форуме встретил вопрос: "Создание системной функции в 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 обновиться вся эта база, соответственно и ваши "системные" функции исчезнут и их придётся создавать заново.
Ссылки по теме