如何在表中更新或插入CTE。SQL
大家好,我一直在尝试在一个名为dbo.filemetadata.Source的列中插入以下代码的结果,下面是代码:如何在表中更新或插入CTE。SQL,sql,sql-server,Sql,Sql Server,大家好,我一直在尝试在一个名为dbo.filemetadata.Source的列中插入以下代码的结果,下面是代码: WITH CTE AS ( SELECT rn, ROW_NUMBER() OVER (PARTITION BY rn ORDER BY (SELECT NULL)) filepartno, Split.a.value('.', 'VARCHAR(100)') AS filepart FROM ( SELECT ROW_N
WITH CTE AS
(
SELECT
rn,
ROW_NUMBER() OVER (PARTITION BY rn ORDER BY (SELECT NULL)) filepartno,
Split.a.value('.', 'VARCHAR(100)') AS filepart
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) rn,
CAST ('<M>' + REPLACE(FilePath, '\', '</M><M>') + '</M>' AS XML) AS String
FROM FileMetadata
) AS A
CROSS APPLY String.nodes ('/M') AS Split(a)
)
SELECT FilePart AS A
FROM CTE C
JOIN (SELECT MAX(filepartno) maxfilepartno, rn
FROM CTE
GROUP BY rn) C2 ON C.rn = C2.rn AND C.filepartno = C2.maxfilepartno-1;
您可以在CTE中将INSERT和SELECT与普通查询结合使用:
WITH CTE AS
(
....
)
INSERT INTO ...
SELECT FilePart AS A
FROM CTE ....
为更新语句更新
您可以在CTE中将INSERT和SELECT与普通查询结合使用:
WITH CTE AS
(
....
)
INSERT INTO ...
SELECT FilePart AS A
FROM CTE ....
为更新语句更新
`我现在可以使用insert into FileMetadata SourceName从选项卡C选择FilePart连接选择MAXfilepartno MAXfilepartno,rn FROM tab GROUP BY rn C2 ON C.rn=C2.rn AND C.filepartno=4但我需要插入以匹配我在元数据中的文件。这不仅仅是在文件元数据中插入一个全新的行。因此基本上你需要根据CTE和FileMetadata中的公共值更新元数据中的现有字段?正确,这就是我认为我需要的,我已经尝试了几个insert,但它不起作用。它不允许我这样做,一旦我放入update语句,它就会使我的CTE无效。tab为SELECT rn,ROW_NUMBER为PARTITION BY rn ORDER BY SELECT NULL filepartno,Split.a.value',“VARCHAR100”作为文件部分,从选择行\u编号到顺序,通过选择NULL rn,CAST+REPLACEFilePath,“\”,+作为XML作为字符串,从文件元数据作为交叉应用字符串。节点“/M”作为拆分从选项卡C选择文件部分连接选择MAXfilepartno MAXfilepartno,rn FROM tab GROUP BY rn C2 ON C.rn=C2.rn AND C.filepartno=4这是我正在尝试更新的内容`我现在可以使用insert into FileMetadata SourceName从选项卡C选择FilePart JOIN选择MAXfilepartno MAXfilepartno,rn FROM tab GROUP BY rn C2 ON C.rn=C2.rn AND C.filepartno=4但我需要插入以匹配我在元数据中的文件。这不仅仅是在文件元数据中插入一个全新的行。因此基本上你需要根据CTE和FileMetadata中的公共值更新元数据中的现有字段?正确,这就是我认为我需要的,我已经尝试了几个insert,但它不起作用。它不允许我这样做,一旦我放入update语句,它就会使我的CTE无效。tab为SELECT rn,ROW_NUMBER为PARTITION BY rn ORDER BY SELECT NULL filepartno,Split.a.value',“VARCHAR100”作为文件部分,从选择行\u编号到顺序,通过选择NULL rn,CAST+REPLACEFilePath,“\”,+作为XML作为字符串,从文件元数据作为交叉应用字符串。节点“/M”作为拆分从选项卡C选择文件部分连接选择MAXfilepartno MAXfilepartno,通过C.rn=C2.rn和C.filepartno=4上的rn C2从选项卡组中删除rn这是我试图更新的内容