데이터베이스 측면에는 binary[16]
열을 사용합니다.
그런 다음 CLR 코드를 코드에서 사용자 정의 유형 내에서 비트 연산자를 오버로드 할 수 있습니다
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[SqlFunction()]
public static SqlBinary bitwiseAnd128Bit(SqlBinary lhs, SqlBinary rhs)
{
My128BitValue v1 = My128BitValue.FromByteArray((byte[])lhs); //explicit conversion
My128BitValue v2 = My128BitValue.FromByteArray((byte[])rhs);
My128BitValue result = v1 & v2;
return result.ToByteArray(); //implicit conversion
}
}
SQL에서 :
이
public struct My128BitValue
{
private readonly long _l1;
private readonly long _l2;
public My128BitValue(long l1, long l2)
{
_l1 = l1;
_l2 = l2;
}
public static My128BitValue operator &(My128BitValue left, My128BitValue right)
{
return new My128BitValue(left._l1 & right._l1, left._l2 & right._l2);
}
public static My128BitValue operator |(My128BitValue left, My128BitValue right)
{
return new My128BitValue(left._l1 | right._l1, left._l2 | right._l2);
}
public static My128BitValue operator ^(My128BitValue left, My128BitValue right)
{
return new My128BitValue(left._l1^right._l1, left._l2^right._l2);
}
}
여기 CLR 기본적인 예를 들어, 당신은 FromByteArray
및 ToByteArray
방법을 완료해야 두 열에 bitwiseAnd128Bit
을 실행할 수 있습니다.
여기에서 CLR에 대한 자세한 내용을 참조하십시오. http://msdn.microsoft.com/en-us/library/w2kae45k(v=vs.90).aspx
"전혀 문제가 없습니다. 피연산자 중 하나는'int'이어야합니다. 그래서 네 번째 바이트를 넘어 비트 연산을 수행하는 것은 간단하지 않습니다. (또한 'bigint'도 작동한다면 8 번째 바이트 이상) –
@MartinSmith 오, 그래, 고마워. – weston
이것은 흥미로운 접근 방법입니다. 나는 그것을 시도 할 것이다. My128BitValue 변수를 선언하고 CLR을 구현 한 후 SQL에서 사용하는 방법을 보여줄 수 있습니까? – cody