클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (514) N
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (301) N
      • C# (84) N
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • node.js
  • android studio
  • c#
  • CSS3
  • MariaDB
  • ASP.NET
  • JavaScript
  • asp.net core web api
  • exception
  • Windows API
  • LINQ
  • 변수
  • android
  • HTML5
  • Entity Framework
  • asp.net core
  • Kotlin
  • .NET
  • jQuery
  • NestJS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

[SQL Server] .NET 어셈블리 등록
Server/SQL Server

[SQL Server] .NET 어셈블리 등록

2020. 6. 2. 11:13
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
    'Server/SQL Server' 카테고리의 다른 글
    • [SQL Server] Memory 관리
    • [MS-SQL] http 요청 보내기
    • [MSSQL] 서버에서 지연되는(처리시간이 오래 걸리는) 쿼리(Query)찾기
    • [SQL Server] 현재 주차및 주차에 해당하는 날짜 구하기
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바