본문 바로가기
DB/MSSQL

MSSQL C# CLR 라이브러리 함수 타입

by HmHjj 2021. 12. 1.
728x90
반응형

C#에서 CLR 라이브러리 활용

 

MSSQL 에서 사용하는 타입과 C#에서 사용하는 타입을 맞쳐야 사용이 가능하다. 

아래 페이지에 자세히 설명이 되어 있다. 

https://docs.microsoft.com/ko-kr/dotnet/framework/data/adonet/sql-server-data-type-mappings

 

SQL Server 데이터 형식 매핑 - ADO.NET

SQL Server와 .NET Framework에 대한 서로 다른 유형 시스템 간의 매핑에 대해 알아봅니다. 이 문서에는 ADO.NET에서 시스템이 상호 작용 하는 방식이 요약 되어 있습니다.

docs.microsoft.com

 

주요 타입만 보자면 이정도가 가장 많이 쓰일거 같다. 

SQL C# .NET
nvarchar String
SqlString
varbinary Byte []
float Double
int Int
DateTime DateTime

SQL varchar 타입이 String도 가능하다고 되어 있으나 C#에서는 적용이 되진 않는다. 

 

아래 C# 예시 소스를 보면 각 타입 별 사용 방법을 확인 할 수 있다. 

입력 값을 받아 그래도 Return 하는 함수.

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString SqlStringTest(SqlString input)
{
    return new SqlString (string.Format("{0}", input));
}
[Microsoft.SqlServer.Server.SqlFunction]
public static Byte[] ByteTest(Byte [] input)
{
    return input;
}
[Microsoft.SqlServer.Server.SqlFunction]
public static Double DoubleTest(Double input)
{
    return input;
}
[Microsoft.SqlServer.Server.SqlFunction]
public static int intTest(int input)
{
    return input;
}
[Microsoft.SqlServer.Server.SqlFunction]
public static DateTime DateTimeTest(DateTime input)
{
    return input;
}

 

CLR 라이브러리 적용 SQL. (clr dll 라이브러리 적용은 다른 블로그 참고.)

CREATE FUNCTION [dbo].[SqlStringTest] (@input [nvarchar](100))
RETURNS [nvarchar](100) WITH EXECUTE AS CALLER AS
EXTERNAL NAME [sqlclr].[UserDefinedFunctions].[SqlStringTest]

CREATE FUNCTION [dbo].[ByteTest] ( @input [varbinary](100) )
RETURNS [varbinary](100) WITH EXECUTE AS CALLER AS
EXTERNAL NAME [sqlclr].[UserDefinedFunctions].[ByteTest]

CREATE FUNCTION [dbo].[DoubleTest] ( @input [float] )
RETURNS [float] WITH EXECUTE AS CALLER AS
EXTERNAL NAME [sqlclr].[UserDefinedFunctions].[DoubleTest]

CREATE FUNCTION [dbo].[intTest] ( @input [int] )
RETURNS [int] WITH EXECUTE AS CALLER AS
EXTERNAL NAME [sqlclr].[UserDefinedFunctions].[intTest]

CREATE FUNCTION [dbo].[DateTimeTest] ( @input [DateTime] )
RETURNS [DateTime] WITH EXECUTE AS CALLER AS
EXTERNAL NAME [sqlclr].[UserDefinedFunctions].[DateTimeTest]

 

타입 별 SQL 테스트 

select dbo.SqlStringTest('abcd')
select CONVERT(varchar(10),dbo.ByteTest(CONVERT(varbinary(10),'abcd')))
select dbo.DoubleTest(123456789.123)
select dbo.intTest(123456789)
select dbo.DateTimeTest(SYSDATETIME())

 

728x90
반응형

댓글