非常简化,我有两个表Source和Target。
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也需要复制这些表,并且需要将新行添加TargetID到TargetChild.TargetIDFK列中。
有两种解决方案。
使用while循环或游标一次将一行(RBAR)插入到Target并用于scope_identity()
填充的FK TargetChild
。
将临时列添加到@Target并插入SourceID。然后,您可以加入该列以在中获取TargetIDFK TargetChild
。
SET IDENTITY_INSERT OFF为@Target
自己处理新值。您将得到一个范围,然后在中使用TargetChild.TargetID。
我并不喜欢它们中的任何一个。到目前为止,我使用的是游标。
我真正想做的是使用outputinsert语句的子句。
insert into @Target(TargetName)
output inserted.TargetID, S.SourceID
select SourceName
from @Source as S
但这是不可能的
The multi-part identifier "S.SourceID" could not be bound.
但是合并是可能的。
merge @Target as T
using @Source as S
on 0=1
when not matched then
insert (TargetName) values (SourceName)
output inserted.TargetID, S.SourceID;
结果
TargetID SourceID
----------- -----------
2 1
4 3
我想知道您是否使用过?如果您对解决方案有任何想法或发现任何问题?在简单的场景中它可以正常工作,但是当由于复杂的源查询而使查询计划变得非常复杂时,可能会发生一些丑陋的事情。最糟糕的情况是TargetID / SourceID对实际上不匹配。
MSDN有这样说的from_table_name了的输出条款。
是列前缀,用于指定DELETE,UPDATE或MERGE语句的FROM子句中包含的表,该表用于指定要更新或删除的行。
由于某些原因,他们不会说“要插入,更新或删除的行”,而只会说“要更新或删除的行”。
欢迎任何想法,非常感谢您对原始问题有完全不同的解决方案。
我认为这是MERGE和输出的一种很好的用法。我已经在几种情况下使用过,到目前为止还没有遇到过任何奇怪的事情。例如,这是一个测试设置,它将一个文件夹及其中的所有文件(身份)克隆到一个新创建的文件夹(GUID)中。
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 illustrate
DECLARE @sFolder TABLE (FromFolderId UNIQUEIDENTIFIER, ToFolderId UNIQUEIDENTIFIER);
DECLARE @sFile TABLE (FromFileId int, ToFileId int);
-- copy Folder Structure
MERGE @FolderIndex fi
USING ( SELECT 1 [Dummy],
FolderId,
FolderName
FROM @FolderIndex [fi]
WHERE FolderName = 'OriginalFolder'
) d ON d.Dummy = 0
WHEN NOT MATCHED
THEN INSERT
(FolderId, FolderName)
VALUES (newid(), 'copy_'+FolderName)
OUTPUT d.FolderId,
INSERTED.FolderId
INTO @sFolder (FromFolderId, toFolderId);
-- copy File structure
MERGE @FileIndex fi
USING ( 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 = 0
WHEN NOT MATCHED
THEN INSERT ([FileName])
VALUES ([FileName])
OUTPUT d.FileId,
INSERTED.FileId
INTO @sFile (FromFileId, toFileId);
-- link new files to Folders
INSERT 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
问题内容: 在Lodash库中,有人可以更好地解释合并和扩展/分配。 这是一个简单的问题,但答案仍然使我回避。 问题答案: 下面是如何/作品:对于源的每个属性,复制其价值,是到目的地。如果属性值本身是对象,则不会对其属性进行递归遍历。整个对象将从源中获取并设置到目标中。 下面是如何工作的:对于源的每个属性,检查如果该属性是对象本身。如果是,则递归关闭并尝试将子对象属性从源映射到目标。因此,实质上,
在Lodash库中,是否有人可以更好地解释合并和扩展/分配。 这是一个简单的问题,但我还是没有回答。
和? 到目前为止,这是我发现的,请评论我的理解是否完整和准确: > 只能使用列(加上行索引),并且它在语义上适合于数据库风格的操作。可以与任一轴一起使用,只使用索引,并且提供了添加一个分级索引。 顺便说一下,这允许以下冗余:两者都可以使用行索引组合两个数据帧。 只提供了 (Pandas擅长处理数据分析中非常广泛的用例。探索文档以找出执行特定任务的最佳方式可能有点令人生畏。)
假设我有这个字符串作为输入 char peer0_0[] = { 0x17,0x03,0x03,0x00,0xa2,0x00,0x00,0x00,0x01,0xc3,0xb3,0xee,0x9a,0x37,0xb6,0xbf,0x8f,0x89,0x58,0xe4,0x8d,0x8a,0x0b,0xe8,0x98,0xba,0x49,0x0f,0x45,0x7c,0x93,0x65,0x 0x80
本文向大家介绍Lodash库中.extend()/ .assign()和.merge()之间的区别。,包括了Lodash库中.extend()/ .assign()和.merge()之间的区别。的使用技巧和注意事项,需要的朋友参考一下 分配/扩展采用源中的每个属性,将其值原样复制到目标。如果属性值本身是对象,则不会对其属性进行递归遍历。这也称为浅复制/克隆。整个对象将从源中取出并放入目的地。 合并
问题内容: 我有以下pandas数据框Top15:在此处输入图片说明 我创建了一个估计每人可引用文件数量的列: 我想知道人均引用文件数量与人均能源供应之间的相关性。因此,我使用该.corr()方法 (皮尔逊相关性): 问题答案: 没有实际数据,很难回答这个问题,但是我想您正在 寻找这样的东西: That calculates the correlation between your two col