0

我有一个名为 service entry 的表,其中有一个名为 part description 的字段,示例数据如下:

**dbo.ServiceEntry**
ID      PartDescription
1200  60009 ~ Slide Error ~ L 0 ~ P 0 | 60011 ~ RV loader - Pick/Place Homing Error ~ L 0 ~ P 0 

然后我有一个名为 ServiceEntryPart 的表,它具有一对多的关系,一个服务条目可以有多个部分,因此服务条目部分表

**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

旧输出

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
4

2 回答 2

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 对我来说看起来很可疑。您最好在需要时使用规范化表上的连接将这些信息拉到一起,而不是以非规范化形式存储。以这种形式,您将无法做很多事情。

于 2013-02-12T17:13:07.677 回答
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
于 2013-02-12T17:52:34.970 回答