Да, вы можете регистрировать сборки, но это редко является хорошей идеей из-за проблем с производительностью.
Но если вы выполняете сложные числовые вычисления или аналогичные операции со скалярными значениями, это может дать вам большую гибкость.Но проблема остается в том, что SQL изначально ориентирован на наборы, а не на C #, поэтому вы легко столкнетесь с несоответствиями.
Вы также должны знать, что вы можете импортировать статические члены только в статические классы.
Но пример Этот класс, который намеренно не имеет пространства имен, так как кажется, что невозможно импортировать классы в пространстве имен.
public static class Math
{
[Microsoft.SqlServer.Server.SqlFunction]
public static int Add(int a, int b)
{
return a + b;
}
[Microsoft.SqlServer.Server.SqlProcedure]
public static void Void(int a, int b)
{
}
}
Требуется некоторый SQL, чтобы получить серверготов, и вы, вероятно, должны быть администратором.
EXEC SP_CONFIGURE 'clr enabled', 1
GO
RECONFIGURE
GO
-- CONSIDER: DROP ASSEMBLY SqlClr
GO
CREATE ASSEMBLY SqlClr
FROM 'pathtoassembly'
WITH PERMISSION_SET = SAFE;
GO
SELECT * FROM sys.assemblies
GO
CREATE FUNCTION [MathAdd] (@a int, @b int)
RETURNS INT
AS EXTERNAL NAME [SqlClr].Math.[Add]
GO
CREATE PROCEDURE [Void] @a INT, @b INT
AS EXTERNAL NAME [SqlClr].Math.[Void]
GO
SELECT dbo.MathAdd (1, 2)
EXEC void 1, 2
ОПЯТЬ: Вы действительно должны быть уверены, что вам это нужно, это редко хорошая идея!(Я использовал его один раз для проверки электронной почты, просмотра DNS и т. Д., Но это было в системе, где вся бизнес-логика была написана на SQL. И это плохо!)
Некоторые полезные ссылки:
http://msdn.microsoft.com/en-us/library/ms189524.aspx
http://www.codeproject.com/KB/database/CLR_in_Sql_Server_2005.aspx