如何在表中更新或插入CTE。SQL

如何在表中更新或插入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

大家好,我一直在尝试在一个名为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_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这是我试图更新的内容