자식 레코드 (코드)가 추가, 업데이트 또는 삭제 될 때 발생하는 트리거를 만들어야합니다. 트리거는 모든 하위 레코드 (코드)의 쉼표로 구분 된 코드 값 문자열을 추가, 업데이트 또는 삭제 된 하위 레코드의 상위 레코드 (프로젝트)의 단일 필드에 채 웁니다.부모 레코드를 자식 레코드 값으로 업데이트하는 쿼리
단일 상위 레코드의 하위 레코드 인 코드에서 코드 값을 검색하는 올바른 쿼리를 작성하는 중입니다.
-- Create the test tables
CREATE TABLE projects (
ProjectId varchar(16) PRIMARY KEY,
ProjectName varchar(100),
Codestring nvarchar(100)
)
GO
CREATE TABLE prcodes (
CodeId varchar(16) PRIMARY KEY,
Code varchar (4),
ProjectId varchar(16)
)
GO
-- Add sample data to tables: Two projects records, one with 3 child records, the other with 2.
INSERT INTO projects
(ProjectId, ProjectName)
SELECT '101','Smith' UNION ALL
SELECT '102','Jones'
GO
INSERT INTO prcodes
(CodeId, Code, ProjectId)
SELECT 'A1','Blue', '101' UNION ALL
SELECT 'A2','Pink', '101' UNION ALL
SELECT 'A3','Gray', '101' UNION ALL
SELECT 'A4','Blue', '102' UNION ALL
SELECT 'A5','Gray', '102'
GO
올바른 업데이트 쿼리를 작성하는 방법에 대해 고민하고 있습니다. 이 쿼리를 수정할 수 있습니까?
-- Partially working, but stuffs all values, not just values from chile (prcodes) records of parent (projects)
UPDATE proj
SET
proj.Codestring = (SELECT STUFF((SELECT ',' + prc.Code
FROM projects proj INNER JOIN prcodes prc ON proj.ProjectId = prc.ProjectId
ORDER BY 1 ASC FOR XML PATH('')),1, 1, ''))
내가 프로젝트에서 Codestring 필드 얻을 결과는 다음과 같습니다
ProjectId ProjectName Codestring
101 Smith Blue,Blue,Gray,Gray,Pink
...
하지만 프로젝트의 Codestring 필드에 필요한 결과는이 :
여기ProjectId ProjectName Codestring
101 Smith Blue,Pink,Gray
...
내 시작이다 트리거에. 위의 업데이트 쿼리가이 트리거에 추가됩니다. 트리거 생성 쿼리를 완료하도록 도와 줄 수 있습니까?
CREATE TRIGGER Update_Codestring ON prcodes
AFTER INSERT, UPDATE, DELETE
AS
WITH CTE AS (
select ProjectId from inserted
union
select ProjectId from deleted
)
shf301 - 답변 해 주셔서 감사합니다. 나는 내일 그것을 시험 할 시간이있을 것이다. Codestring 필드의 필요성은 우리가 작업해야만하는 독점적 인 데이터베이스와 사용자가 사용할 수있는 필드를 사용자 정의 할 수있는 능력에 대한 제약에서 비롯됩니다. –
shf301 -이 답변은 완벽합니다! 나는 오늘 아침에 그것을 시험했다. 쿼리는 ** 정확히 ** 필요한 것을 수행합니다. 고맙습니다! –
@WellsAnderson - 위대한 - 다음 내 대답을 허용 대답으로 표시하십시오. – shf301