by Admin
5. июня 2009 19:26
В очередной раз на форуме встретил вопрос: "Создание системной функции в MS SQL Server 2008".
Как известно, в SQL Server 2000 эта задача решалась достаточно легко и без малой крови (How to Write Your Own System Functions).
Но как всё-таки решить подобную задачу на SQL Server 2005/2008? Если верить официальным источникам, то никак. Но...есть способ
Внимание!!!
не рекомендую им пользоваться!!!
- Останавливаем наш SQL Server
- Запускаем его в монопольном режиме (с флагом -m): cd Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLBinn sqlservr.exe -m
- Создаём нашу функцию в системной БД (скрытой в обычном режиме работы SQL Server`а) mssqlsystemresource
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
- Перестартовываем наш SQL Server в обычном режиме
- Пользуемся нашей-системной функцией в контексте любой БД
PS: Так как БД mssqlsystemresource хранит все системные объекты, то при установке очередного SP обновиться вся эта база, соответственно и ваши "системные" функции исчезнут и их придётся создавать заново.