将非标准化的csv文件导入生产数据库表

时间:2019-10-29 11:25:01

标签: sql sql-server

再次感谢。请在下面找到我的示例数据。

  1. 测试数据来自csv文件。 landId是与Title表的M:M关系。
  2. 因此,一个特定的TitleID只有一个LandID,但是许多TitleID可以与一个LandID相关联。
  3. Title表和Land表之间有一个称为## land_title的桥表。
  4. 基本上,我想将csv中的记录追加到Land表中的现有记录,然后将相应的值插入## land_title,然后插入Title表。
  5. 我正在尝试这种方法,但我需要你们的帮助。希望这有道理。

 INSERT INTO ##land_title( LandId, titleid, CreatedDateTime, CreatedUserID )
     SELECT LandID, Land_TitleID, getdate(),'xyz'
    FROM #Testdata as sd
 OUTPUT inserted or SCOPE_IDENTITY()


 CREATE TABLE #Testdata
 (
     LandID INT,
     ReferenceID INT,
     Land_TitleID VARCHAR(MAX)
 )
 INSERT #Testdata SELECT 1,  9, '18,20,22'
 INSERT #Testdata SELECT 2,  8, '17,19'
 INSERT #Testdata SELECT 3,  7, '13,19,20'
INSERT #Testdata SELECT 4,  6, ''
INSERT #Testdata SELECT 9, 11, '1,2,3,4'
Select * from #Testdata
;WITH tmp(LandID, ReferenceID, DataItem, Land_TitleID) AS
(
    SELECT
        LandID,
        ReferenceID,
        LEFT(Land_TitleID, CHARINDEX(',', Land_TitleID + ',') - 1),
        STUFF(Land_TitleID, 1, CHARINDEX(',', Land_TitleID + ','), '')
    FROM #Testdata
    UNION all
    SELECT
        LandID,
        ReferenceID,
        LEFT(Land_TitleID, CHARINDEX(',', Land_TitleID + ',') - 1),
        STUFF(Land_TitleID, 1, CHARINDEX(',', Land_TitleID + ','), '')
    FROM tmp
    WHERE
        Land_TitleID > ''
)
SELECT
    LandID,
    ReferenceID,
    DataItem
FROM tmp
ORDER BY LandID

谢谢

R

0 个答案:

没有答案