Microsoft SQL Server
공용 언어 런타임 통합
수색…
데이터베이스에서 CLR 사용
CLR 프로시 저는 기본적으로 활성화되어 있지 않습니다. CLR을 사용하려면 다음 쿼리를 실행해야합니다.
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
또한 일부 CLR 모듈에서 외부 액세스가 필요한 경우 데이터베이스에서 TRUSTWORTHY 속성을 ON으로 설정해야합니다.
ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON
SQL CLR 모듈이 들어있는 .dll 추가
.Net 언어로 작성된 프로 시저, 함수, 트리거 및 유형은 .dll 파일에 저장됩니다. CLR 프로 시저가 포함 된 .dll 파일을 만든 후에는 SQL Server로 가져와야합니다.
CREATE ASSEMBLY MyLibrary
FROM 'C:\lib\MyStoredProcedures.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
PERMISSION_SET은 기본적으로 .dll의 코드가 외부 리소스 (예 : 파일, 웹 사이트, 다른 서버)에 액세스 할 수있는 권한이 필요없고 메모리에 액세스 할 수있는 기본 코드를 사용하지 않는다는 것을 의미하는 Safe입니다.
PERMISSION_SET = EXTERNAL_ACCESS는 외부 리소스에 액세스 할 코드가 포함 된 어셈블리를 표시하는 데 사용됩니다.
sys.assemblies 뷰에서 현재 CLR 어셈블리 파일에 대한 정보를 찾을 수 있습니다.
SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1
SQL Server에서 CLR 함수 만들기
.Net 함수를 작성하고 .dll로 컴파일하고 SQL 서버로 어셈블리로 가져온 경우 해당 어셈블리에서 함수를 참조하는 사용자 정의 함수를 작성할 수 있습니다.
CREATE FUNCTION dbo.TextCompress(@input nvarchar(max))
RETURNS varbinary(max)
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].TextCompress
.Net 함수와 일치하는 입력 매개 변수와 반환 값을 사용하여 함수 및 시그니처의 이름을 지정해야합니다. AS EXTERNAL NAME 절에서 어셈블리 이름,이 함수가있는 네임 스페이스 / 클래스 이름 및 함수로 노출 될 코드가 들어있는 클래스의 메서드 이름을 지정해야합니다.
다음 쿼리를 사용하여 CLR 함수에 대한 정보를 찾을 수 있습니다.
SELECT * FROM dbo.sysobjects WHERE TYPE ='FS'
SQL Server에서 CLR 사용자 정의 형식 만들기
사용자 정의 형식을 나타내는 .Net 클래스를 만들고 .dll로 컴파일 한 다음 SQL Server에 어셈블리로 가져온 경우이 클래스를 참조하는 사용자 정의 함수를 만들 수 있습니다.
CREATE TYPE dbo.Point
EXTERNAL NAME MyLibrary.[Name.Space.Point]
T-SQL 쿼리에 사용할 형식의 이름을 지정해야합니다. EXTERNAL NAME 절에서 어셈블리 이름, 네임 스페이스 및 클래스 이름을 지정해야합니다.
SQL Server에서 CLR 프로 시저 만들기
일부 클래스에서 .Net 메서드를 만든 다음 .dll로 컴파일하고 SQL 서버로 어셈블리로 가져온 경우 해당 어셈블리에서 메서드를 참조하는 사용자 정의 저장 프로 시저를 만들 수 있습니다.
CREATE PROCEDURE dbo.DoSomethng(@input nvarchar(max))
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].DoSomething
.Net 메소드와 일치하는 입력 매개 변수로 프로 시저 및 시그니처의 이름을 지정해야합니다. AS EXTERNAL NAME 절에서 어셈블리 이름,이 프로 시저가있는 네임 스페이스 / 클래스 이름 및 프로 시저로 노출 될 코드가 들어있는 클래스의 메서드 이름을 지정해야합니다.