sql >> データベース >  >> RDS >> Sqlserver

MSSQL:アップロードされたファイルから一致する行を更新します

    これは、パイプで区切られたデータを取得するためのはるかに簡単な方法です。 #temp2 内にテーブルのようなデータがあります。ここからは UPDATE が簡単にできるはずです ,INSERT または MERGE

    注意:列の意味は推測できたので、列名はゴミかもしれません...

    CREATE TABLE #temp1(WHOLEROW VARCHAR(8000));
    INSERT INTO #temp1 VALUES
     ('F20160323-1000|FSI|BISCOCHO|DELIVERED|42317|||||GINA T|TENANT|42311')
    ,('F20160323-1001|FSI|MARTINNE|DELIVERED|42314|||||MERLIE STRADA|IN LAW|42311')
    ,('F20160323-1002|FSI|MANALO|DELIVERED|42313|||||GINA A|TENANT|42311')
    ,('F20160323-1004|FSI|HAMOY CAJAYON|DELIVERED|42311|||||MERLIE QTRADA|IN LAW|42311')
    ,('F20160323-1003|FSI|FRANCISCA|DELIVERED|42312|||||GINA B|TENANT|42311')
    ,('F20160323-1005|FSI|NINA|DELIVERED|42318|||||MERLIE STRADA|IN LAW|42311');
    
    ;WITH Splitted(AsXml) AS
    (
        SELECT CAST('<x>' + REPLACE(t1.WHOLEROW,'|','</x><x>') + '</x>' AS XML)
        FROM #temp1 AS t1
    )
    SELECT AsXml.value('x[1]','varchar(max)') AS ID
          ,ID_Splitted.*
          ,AsXml.value('x[2]','varchar(max)') AS FSI_Field
          ,AsXml.value('x[3]','varchar(max)') AS CAPTION
          ,AsXml.value('x[4]','varchar(max)') AS STATUS
          ,AsXml.value('x[5]','varchar(max)') AS NUMBER
          ,AsXml.value('x[6]','varchar(max)') AS Fld1
          ,AsXml.value('x[7]','varchar(max)') AS Fld2
          ,AsXml.value('x[8]','varchar(max)') AS Fld3
          ,AsXml.value('x[9]','varchar(max)') AS Fld4
          ,AsXml.value('x[10]','varchar(max)') AS TARGET
          ,AsXml.value('x[11]','varchar(max)') AS TARGET_TYPE
          ,AsXml.value('x[12]','varchar(max)') AS TARGET_NUMBER
    INTO #temp2
    FROM Splitted
    CROSS APPLY(SELECT LEFT( AsXml.value('x[1]','varchar(max)'),1) AS FirstLetter
                      ,CAST(SUBSTRING(AsXml.value('x[1]','varchar(max)'),2,8) AS DATE) AS IncludedDate
                      ,CAST(SUBSTRING( AsXml.value('x[1]','varchar(max)'),11,100)  AS INT) AS IncludedNumber) AS ID_Splitted;
    
    SELECT * FROM #temp2;
    
    DROP TABLE #temp2;
    DROP TABLE #temp1;
    

    結果

    ID         FirstLetter  IncludedDate    InclNmbr    FSI CAPTION      STATUS     NUMBER  TARGET          TYPE    NUMBER
    F20160323-1000  F       2016-03-23      1000        FSI BISCOCHO     DELIVERED  42317   GINA T          TENANT  42311
    F20160323-1001  F       2016-03-23      1001        FSI MARTINNE     DELIVERED  42314   MERLIE STRADA   IN LAW  42311
    F20160323-1002  F       2016-03-23      1002        FSI MANALO       DELIVERED  42313   GINA A          TENANT  42311
    F20160323-1004  F       2016-03-23      1004        FSI HAMOY CAJAYONDELIVERED  42311   MERLIE QTRADA   IN LAW  42311
    F20160323-1003  F       2016-03-23      1003        FSI FRANCISCA    DELIVERED  42312   GINA B          TENANT  42311
    F20160323-1005  F       2016-03-23      1005        FSI NINA         DELIVERED  42318   MERLIE STRADA   IN LAW  42311
    



    1. SQLite Random()のしくみ

    2. hibernate hql-更新クエリの実行後に、更新された行IDリストを返します

    3. 更新クエリのステートメントを準備するにはどうすればよいですか?

    4. MySQLでCOUNTを使用するときにnullではなく0を返す方法