1

각기 다른 속성/열을 가진 [기계] 및 [예비 부품] 테이블이 있습니다. 하위 유형으로 만들고이를 [자산]이라고하는 상위 유형 테이블을 작성하여 유지 관리 예약 응용 프로그램에서 모두 참조 할 수 있도록하겠습니다.데이터가 이미 포함 된 하위 유형 테이블의 외래 키 채우기

[Assets] 테이블에는 [Asset_ID], [Asset_Type] 및 [Description] 열이 포함됩니다. [Asset_ID]는 ID PK이고 [Asset_Type]은 int (예 : Molds = 1, Machines = 2 등)이고 [Description]은 하위 유형 테이블에서 가져옵니다. 각 하위 유형 테이블에 [Asset_FK]라는 컬럼을 외래 키로 추가합니다.

제 문제는 각 하위 유형 테이블에는 이미 수백 - 수천 개의 데이터 행이 있다는 것입니다. 기존 레코드 각각에 대해 수동으로 PK-FK를 만드는 것은 무리가 있지만 자동화하는 데 필요한 SQL에 대해 확신 할 수 없습니다. 이 심지어 내가 만약이 같은 쿼리에서 [형]에 FK를 업데이트하는 방법을 잘 모르겠어요, 또는,

DECLARE @AssetID TABLE (ID int) 
INSERT INTO Assets (Assets.Description, Assets.Asset_Type) 
OUTPUT Inserted.Asset_ID INTO @AssetID 
SELECT IsNull(Moulds.Description,''), 5 
FROM Moulds 

그러나 다음 [자산] 테이블을 채우기위한

, 나는 현재이가 올바른 접근법. 특히, 내가 선택한 하위 유형에서 행을 식별하는 방법을 잘 모르겠습니다.

제 질문을 요약하면 빈 수퍼 유형 표가 있고 하위 유형 표가 채워집니다. 하위 유형 테이블을 사용하여 4 퍼 유형 테이블을 채우고이를 링크하기 위해 기존 부속 유형 레코드의 FK 값을 자동으로 채 웁니다. SQL (MS SQL Server 2008r2)을 사용하여이 작업을 수행하려면 어떻게해야합니까?

답변

0

그래서, RS를 기반으로의 대답은, 내가 아이디어를 내놓았다. 테이블 [Molds]의 PK (또는 다른 하위 유형 테이블)를 저장하는 [Assets] 테이블에 임시 열을 추가하고 업데이트 작업에 사용하여 열을 삭제합니다. 다음과 같이 보입니다 :

USE [Maintenance] 

ALTER TABLE Assets 
ADD Asset_FK int null 

GO 

DECLARE @AssetID TABLE (ID int) 

INSERT INTO Assets (Description, Asset_Type, Asset_FK) 
OUTPUT Inserted.Asset_ID INTO @AssetID 
SELECT IsNull(Description,''), 5, Mould_PK 
FROM Moulds 

UPDATE m 
SET m.Asset_ID = a.Asset_ID 
FROM Moulds m 
INNER JOIN Assets a 
    ON m.Mould_PK = a.Asset_FK AND a.Asset_Type = 5 
INNER JOIN @AssetID a2 ON a.Asset_ID = a2.ID 

GO 

ALTER TABLE Assets 
DROP COLUMN Asset_FK 

아마도 가장 우아한 대답은 아니지만 간단하고 작동하는 것 같습니다.

1

이을 시도해보십시오.

update m 
set m.fkid = a.id 
from moulds m 
inner join assets a 
    on isnull(m.description,'') = a.description and a.Asset_Type = 5 
inner join @AssetID a2 on a.id = a2.id 
+0

답변 해 주셔서 감사합니다. 불행히도, 설명은 항상 고유하지 않으므로 내 경우에는 설명이 적절하지 않습니다. 실제로, 이것은 나에게 생각을 준다. – NeutronFlux

관련 문제