2011-03-29 5 views
0

몇 가지 테이블에서 데이터를 선택하고 일종의 다 대다 관계가 저장된 테이블에 새 행을 삽입하는 스크립트를 준비해야합니다.T-SQL의 결정적 GUID 생성

기본적으로 uniqueidentifier 필드를 기본 키로 사용하는 두 개의 테이블과이 테이블의 두 개의 외래 키와 일부 추가 데이터를 저장하는 다른 테이블이 있습니다. 이 테이블의 기본 키는 uniqueidentifier입니다.

INSERT ResultTable ([primaryKey],[foreignA], [foreignB]) 
    SELECT newid(), /* <- Can't have it! */ 
      @foreignKeyA, 
      fb.[primaryKey] 
    FROM foreignTableB as fb 

문제는 내 생성 된 데이터에 대한 GUID를 생성하는 newid()를 사용할 수 있다는 것입니다. 요구 사항 중 하나는 동일한 테이블에서 실행될 때 스크립트가 동일한 결과 (기본 키 포함)를 생성한다는 것입니다. 그래서 다른 두 개의 uniqueidentifier 값을 기반으로 생성 된 uniqueidentifier 값을 가진 새로운 행을 삽입하는 스크립트를 만들어야합니다.

이제는 하나의 GUID에서 다른 GUID 로의 매핑을 제공하는 함수에 대해 알지 못합니다. 아마 아무 것도 없을거야. 그러나 나는 여전히 몇 가지 제안과 조언을 듣기를 희망합니다. 또한

:

  • 우리는 외래 키의 쌍
  • 나는 모든 테이블에 기본 키 필드의 유형을 변경할 수 없습니다 테이블에서 고유되어 있다고 가정 할 수 있습니다 그것은이다
  • 언급 대부분 SQL Server 2005/2008이지만 일부는 SQL Server 2000을 실행할 수 있습니다.

감사합니다.

+0

이 정수 1을 복용하고 거의 같은 것 같은데 (점의 종류는 정말입니다) GUID를 재현 할 수 없을 것 있도록

그러나 생성 된 GUID의 차원 중 하나

은 시간이다 정수 # 2를 사용하고, 정수 # 3을 기본 키로 사용할 수 있도록 연결합니다. 나는 두 개의 정수 쌍 (또는 GUID)의 100 % 확실성으로 동일한 "출력"정수를 생성하지 않는 방법을 알고 있지 않습니다. (해시 알고리즘을 사용하면 GUID 값을 생성하는 알고리즘을 찾을 수 있습니다.) –

+0

@Philip Kelley : GUID를 문자열로 변환하고 문자를 조작하여 (다시 정렬) 다음과 같은 작업을 수행 할 수 있다고 확신합니다. 결과 문자열을 다시'uniqueidentifier'로 변환합니다. 나는 아마도 이런 식으로 일을 끝낼 것입니다 (비록 그것이 엄청나게 엉망이고 가장 나쁜 아이디어 일지라도). 그러나 나는 할 필요가 없다고 결정했습니다. – Dyppl

답변

2

가장 좋은 대답은 삽입 문 목록 인 스크립트를 생성하는 것입니다. 이 스크립트는 동적 SQL 문자열을 생성하는 다른 스크립트에서 생성 할 수 있습니다. 반복적으로 이렇게하면 각 루프의 guid 함수를 호출 할 수 있습니다.

이렇게하면 guids를 사용하여 동일한 결과를 여러 번 실행할 수있는 삽입 목록을 갖게됩니다. 당신이

+0

당신의 조언에 감사드립니다. 그것은 거의 정확하게 끝났습니다. 어제하고있어. 그것은 'uniqueidentifier'값을 생성하는 것에 대한 질문에 실제로 대답하지 않지만 내 경우에는 문제를 해결하므로 답변을 표시하고 있습니다. – Dyppl