第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Merge.輸出來獲得Sourcee.id和Target t.id之間的映射

使用Merge.輸出來獲得Sourcee.id和Target t.id之間的映射

RISEBY 2019-06-13 14:50:55
使用Merge.輸出來獲得Sourcee.id和Target t.id之間的映射非常簡單,我有兩個表來源和目標(biāo)。declare @Source table (SourceID int identity(1,2), SourceName varchar(50))declare @Target table (TargetID int identity(2,2),  TargetName varchar(50))insert into @Source values ('Row 1'), ('Row 2')我想把所有的行從@Source到@Target并且知道TargetID每人SourceID因為還有表SourceChild和TargetChild這也需要復(fù)制,我需要添加新的TargetID進TargetChild.TargetIDFK柱對此有幾個解決方案。使用while循環(huán)或游標(biāo)一次插入一行(Rbar)并使用scope_identity()來填補.的FK.TargetChild.向@Target和插入SourceID..然后,您可以加入該列,以獲取TargetID為FK在TargetChild.SET IDENTITY_INSERT OFF為@Target自己來分配新的價值觀。你得到一個范圍,然后你用在TargetChild.TargetID.我一點也不喜歡他們。到目前為止我用的是游標(biāo)。我真正想做的是使用output插入語句的子句。insert into @Target(TargetName)output inserted.TargetID, S.SourceIDselect SourceNamefrom @Source as S但這是不可能的The multi-part identifier "S.SourceID" could not be bound.但合并是可能的。merge @Target as Tusing @Source as Son 0=1when not matched then   insert (TargetName) values (SourceName)output inserted.TargetID, S.SourceID;結(jié)果TargetID    SourceID----------- -----------2           14           3我想知道你有沒有用過這個?如果你對解決方案有任何想法,或者看到有什么問題嗎?它在簡單的場景中運行良好,但是當(dāng)查詢計劃由于復(fù)雜的源查詢而變得非常復(fù)雜時,可能會發(fā)生一些丑陋的事情。最糟糕的情況是TargetID/SourceID對實際上不匹配。MSDN有關(guān)于from_table_name.的.輸出量條款。列前綴,它指定DELETE、UPDATE或Merge語句的FROM子句中包含的表,用于指定要更新或刪除的行。出于某種原因,他們沒有說“要插入、更新或刪除的行”,而是要更新或刪除的行。任何想法都是受歡迎的,完全不同的解決方案是非常感謝的。
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻1810條經(jīng)驗 獲得超4個贊

在我看來,這是對合并和輸出的一種很好的使用。我在幾個場景中使用過,到目前為止還沒有經(jīng)歷過任何奇怪的事情。例如,下面是將文件夾和其中所有文件(標(biāo)識)克隆到新創(chuàng)建的文件夾(GUID)中的測試設(shè)置。

DECLARE @FolderIndex TABLE (FolderId UNIQUEIDENTIFIER PRIMARY KEY, FolderName varchar(25));INSERT INTO @FolderIndex 
    (FolderId, FolderName)
    VALUES(newid(), 'OriginalFolder');DECLARE @FileIndex TABLE (FileId int identity(1,1) PRIMARY KEY, FileName varchar(10));
    INSERT INTO @FileIndex 
    (FileName)
    VALUES('test.txt');DECLARE @FileFolder TABLE (FolderId UNIQUEIDENTIFIER, FileId int, PRIMARY KEY(FolderId, FileId));
    INSERT INTO @FileFolder 
    (FolderId, FileId)
    SELECT  FolderId, 
            FileId    FROM    @FolderIndex    CROSS JOIN  @FileIndex;  -- just to illustrateDECLARE @sFolder TABLE
             (FromFolderId UNIQUEIDENTIFIER, ToFolderId UNIQUEIDENTIFIER);DECLARE @sFile TABLE (FromFileId int, ToFileId int);
             -- copy Folder StructureMERGE @FolderIndex fiUSING   (   SELECT  1 [Dummy],
                    FolderId, 
                    FolderName            FROM    @FolderIndex [fi]
            WHERE   FolderName = 'OriginalFolder'
        ) d ON  d.Dummy = 0WHEN NOT MATCHED THEN INSERT 
    (FolderId, FolderName)
    VALUES (newid(), 'copy_'+FolderName)OUTPUT  d.FolderId,
        INSERTED.FolderIdINTO    @sFolder (FromFolderId, toFolderId);-- copy File structureMERGE   @FileIndex fiUSING  
         (   SELECT  1 [Dummy],
                    fi.FileId, 
                    fi.[FileName]
            FROM    @FileIndex fi            INNER
            JOIN    @FileFolder fm ON 
                    fi.FileId = fm.FileId            INNER
            JOIN    @FolderIndex fo ON 
                    fm.FolderId = fo.FolderId            WHERE   fo.FolderName = 'OriginalFolder'
        ) d ON  d.Dummy = 0WHEN NOT MATCHED THEN INSERT ([FileName])
    VALUES ([FileName])OUTPUT  d.FileId,
        INSERTED.FileIdINTO    @sFile (FromFileId, toFileId);-- link new files to FoldersINSERT INTO @FileFolder (FileId, FolderId)
    SELECT  sfi.toFileId, sfo.toFolderId    FROM    @FileFolder fm    INNER
    JOIN    @sFile sfi ON  
            fm.FileId = sfi.FromFileId    INNER
    JOIN    @sFolder sfo ON 
            fm.FolderId = sfo.FromFolderId-- return    SELECT  * FROM    @FileIndex fi 
JOIN    @FileFolder ff ON  
        fi.FileId = ff.FileId 
JOIN    @FolderIndex fo ON  
        ff.FolderId = fo.FolderId


查看完整回答
反對 回復(fù) 2019-06-13
  • 2 回答
  • 0 關(guān)注
  • 705 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號