我有一个名为service entry的表,它有一个名为part description的字段,Sample数据如下:
**dbo.ServiceEntry**
ID PartDescription
1200 60009 ~ Slide Error ~ L 0 ~ P 0 | 60011 ~ RV loader - Pick/Place Homing Error ~ L 0 ~ P 0
然后我有一个名为ServiceEntryPart的表,它具有1对多的关系,一个服务条目可以包含多个部分,因此服务条目部分表
**dbo.ServiceEntryPart**
ID ServiceEntry PartID OldPartID
1 1200 5000 60009
2 1200 5500 60011
**dbo.Part**
ID Description OldPartID
5000 New Slide Description 60009
5500 Xyz 60011
我正在尝试编写一个脚本来更新ServiceEntry表中的partdescription列,因此预期的结果将如下所示,其中包含新的部件ID。所以它基本上只是用新的部分替换旧的部分ID
OLD OUTPUT
60009 ~ Slide Error ~ L 0 ~ P 0 | 60011 ~ RV loader - Pick/Place Homing Error ~ L 0 ~ P 0
新输出
5000 ~ New Slide Description ~ L 0 ~ P 0 | 5500 ~ Xyz ~ L 0 ~ P 0
我需要一些有关script.query的帮助,用新的部件ID(如果存在)更新此字段:
1. Get the existing field
DECLARE @PartDescription VARCHAR(8000)
SELECT @PartDescription = PartDescription FROM
ServiceEntry
2. UPDATE ServiceEntry
SET PartDescription
答案 0 :(得分:0)
如果您可以这样选择:
SELECT SE.ID, SE.PartDescription
FROM ServiceEntryPart SEP
JOIN ServiceEntry SE ON SE.ID = SEP.ServiceEntry
JOIN Part P ON P.ID = SEP.PartID
您应该可以像这样更新:
UPDATE SE
SET SE.PartDescription = P.Description
FROM ServiceEntryPart SEP
JOIN ServiceEntry SE ON SE.ID = SEP.ServiceEntry
JOIN Part P ON P.ID = SEP.PartID
但请检查您是否正在提取正确的记录。
ServiceEntry中的连接PartDescription对我来说很有问题。您可能最好在需要时使用规范化表上的连接将这些信息拉到一起,而不是以非规范化形式存储它们。你将无法用这种形式做很多事情。
答案 1 :(得分:0)
DECLARE @ServiceEntry TABLE(
ID INT,
PARTDescription VARCHAR(MAX)
)
DECLARE @ServiceEntryPart TABLE(
ID INT,
ServiceEntry INT,
PartID INT,
OldPartID INT
)
DECLARE @Part TABLE(
ID INT,
[Description] VARCHAR(50),
OldPartID VARCHAR(50)
)
INSERT INTO @ServiceEntry SELECT 1200, ''
INSERT INTO @ServiceEntryPart SELECT 1, 1200, 5000, 60009
INSERT INTO @ServiceEntryPart SELECT 2, 1200, 5500, 60011
INSERT INTO @Part SELECT 5000, 'New Slide Description', 60009
INSERT INTO @Part SELECT 5500, 'Xyz', 60011
UPDATE @ServiceEntry
SET PARTDescription =
(
SELECT CAST(p.ID AS VARCHAR)+ ' ~ ' + p.Description + ' ~ L 0 ~ P 0 | '
FROM @Part p INNER JOIN
@ServiceEntryPart ep ON p.ID = ep.PartID
WHERE ep.ServiceEntry = se.ID
FOR XML PATH('')
)
FROM @ServiceEntry se
UPDATE @ServiceEntry
SET PARTDescription = LEFT(PARTDescription, LEN(PARTDescription) -2)
SELECT *
FROM @ServiceEntry