728x90
C#으로 작성된 프로그램을 MS-SQL Server에서 동작할 수 있도록 하려면 MS-SQL Server의 어셈블리에 등록시켜주면 됩니다.
이 과정을 살펴보면 다음과 같습니다.
우선 Visual Studio에서 SQL Server Database Project를 생성합니다.
프로젝트명은 db_server로 하겠습니다. 당연히 이 이름은 임의로 잡아주셔도 됩니다.
프로젝트 생성 후 프로젝트-> 추가에서 SQL CLR C#을 선택합니다. 예제에서는 간단한 Function을 생성할 것이므로 SQL CLR C# User Defined Function을 선택합니다.
Plus.cs 파일을 다음과 같이 수정합니다. 파일 내용은 2개의 정수값을 받아 합산한 결과를 반환하도록 하였습니다.
빌드 후 dll을 생성합니다.
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlInt32 Plus(SqlInt32 i, SqlInt32 j)
{
return i + j;
}
}
이제 MS-SQL Server쪽에서 다음과 같이 작업을 진행합니다.
--CLR 활성화
Exec sp_configure 'clr enabled', 1
Reconfigure With Override;
--사용할 DB에 필요한 권한을 위한 TRUSTWORTHY 속성을 On
Alter Database [master] Set
TrustWorthy On;
--CREATE ASSEMBLY [어셈블리명] AUTHORIZATION dbo
--FROM 'dll경로'
--WITH PERMISSION_SET = UNSAFE
--ASSEMBLY 생성
Create Assembly plus
From 'C:\db_server.dll'
With Permission_Set = Unsafe;
--Function 생성
Create Function [dbo].[plus] (@i int, @j int)
Returns [int] WITH EXECUTE AS CALLER
As
External Name [plus].[UserDefinedFunctions].[Plus];
GO
--사용
Declare @i int = 10;
Declare @j int = 20;
Select dbo.plus(@i, @j);
중간에 [어셈블리명]이 있는 구문은 내가 생성한 dll을 등록할 때 필요한 추가적인 dll이 있을 경우 별도로 설정해 주기 위한 구문입니다. 필요 없으면 생략이 가능합니다.
728x90
'Server > SQL Server' 카테고리의 다른 글
[MSSQL] Database Offline (0) | 2022.01.12 |
---|---|
[SQL Server] Memory 관리 (0) | 2021.11.23 |
[MS-SQL] http 요청 보내기 (0) | 2020.10.27 |
[MSSQL] 서버에서 지연되는(처리시간이 오래 걸리는) 쿼리(Query)찾기 (2) | 2020.03.17 |
[SQL Server] 현재 주차및 주차에 해당하는 날짜 구하기 (0) | 2019.09.17 |