0

部品の説明と呼ばれるフィールドを持つサービス エントリと呼ばれるテーブルがあります。サンプル データは次のとおりです。

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

次に、1 対多の関係を持つ 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を新しいものに置き換えるだけです

古い出力

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
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 に答える
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 に答える