2014-10-10 2 views
3

SQL Server에서 128 비트 부호없는 정수를 구현하는 가장 좋은 방법을 찾고 있습니다. 주요 요구 사항은 은 모든 128 비트에 대해 비트 단위 연산을 지원해야한다는 것입니다. (이론적으로는 64 비트 컴퓨터에서 이론적으로 가능합니까?)SQL Server 2012에서 128 비트 Int?

CLR 어셈블리를 통해 C# 및 사용자 정의 형식을 사용하는 일부 구현에 대해 읽었지만 비트를 지원하는지 여부를 결정할 수 없었습니다. 작업.

누구든지 내가해야 할 일을 성공적으로 마쳤습니까? 모든 입력은 크게 감사하겠습니다. 감사!!

답변

4

데이터베이스 측면에는 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 기본적인 예를 들어, 당신은 FromByteArrayToByteArray 방법을 완료해야 두 열에 bitwiseAnd128Bit을 실행할 수 있습니다.

여기에서 CLR에 대한 자세한 내용을 참조하십시오. http://msdn.microsoft.com/en-us/library/w2kae45k(v=vs.90).aspx

+0

"전혀 문제가 없습니다. 피연산자 중 하나는'int'이어야합니다. 그래서 네 번째 바이트를 넘어 비트 연산을 수행하는 것은 간단하지 않습니다. (또한 'bigint'도 작동한다면 8 번째 바이트 이상) –

+0

@MartinSmith 오, 그래, 고마워. – weston

+0

이것은 흥미로운 접근 방법입니다. 나는 그것을 시도 할 것이다. My128BitValue 변수를 선언하고 CLR을 구현 한 후 SQL에서 사용하는 방법을 보여줄 수 있습니까? – cody

관련 문제