批量处理sql 数据存入xml类型列

摘要:
个人记录要求:当表T1ItemCode和表T2ItemName中的数据相等时,表T2对应的ID和ItemName列中的数据将分别存储在表T1CAOZOO字段的ID元素和text元素的文本中。

个人记录

需求:当表T1 ItemCode和表T2 ItemName的数据相等时,将表T2所对应的ID和ItemName列的数据分别存入表T1 CAOZUO字段的id元素和text元素的文本中。

批量处理sql 数据存入xml类型列第1张

下面用存储过程循环来实现批量处理sql 数据存入xml类型数据:

CREATE PROCEDURE [dbo].[PRE_XMCus]

AS
BEGIN
    --创建临时表
    CREATE TABLE #TEMPS (Dspid uniqueidentifier NULL,ItemCode VARCHAR(100) NULL,Id uniqueidentifier NULL,ItemName NVARCHAR(100) NULL,ROWID INT NULL)
    DECLARE @BatchID uniqueidentifier
    SET @BatchID =NEWID()
    
    INSERT INTO #TEMPS
    (Dspid,ItemCode,Id,ItemName,ROWID)    
    SELECT  @BatchID AS Dspid,T1.ItemCode,T2.Id,T2.ItemName,ROW_NUMBER() OVER(ORDER BY T1.ItemCode)AS ROWID    
    FROM TECUL_XMCus T1
    INNER JOIN Tecul_SysUsers T2 ON T1.ItemCode=T2.ItemName AND T2.IsDelete=0
    WHERE T1.IsDelete=0 AND T1.CAOZUO IS NULL
    --先将操作用户字段为NULL的赋值
    UPDATE T2
    SET T2.CAOZUO='<CaoZuo><data><item><id>64b2e004-1038-415b-8522-7c1a8c974572</id><text>020001</text></item></data></CaoZuo>'
    FROM TECUL_XMCus T2
    INNER JOIN Tecul_SysUsers T3 ON T2.ItemCode=T3.ItemName AND T3.IsDelete=0
    WHERE T2.IsDelete=0 AND T2.CAOZUO IS NULL
    --获取最大行数
    DECLARE @Maxrow INT=(SELECT COUNT(*) FROM #TEMPS)
    --开始循环
    WHILE(@Maxrow>0)
    BEGIN
    BEGIN TRY
    BEGIN TRAN
        IF EXISTS(SELECT 1 FROM #TEMPS WHERE Dspid=@BatchID AND ROWID=@Maxrow)
        BEGIN
        DECLARE @ItemCode VARCHAR(20)
        SELECT @ItemCode=ItemCode FROM #TEMPS WHERE Dspid=@BatchID AND ROWID=@Maxrow
        IF EXISTS(SELECT 1 FROM #TEMPS WHERE Dspid=@BatchID AND ROWID=@Maxrow)
            BEGIN
            DECLARE @aid uniqueidentifier,@bid NVARCHAR(100)
            SET @aid=(SELECT Id FROM #TEMPS WHERE ItemCode=@ItemCode AND Dspid=@BatchID AND ROWID=@Maxrow)
            set @bid=(SELECT ItemName FROM #TEMPS WHERE ItemCode=@ItemCode AND Dspid=@BatchID AND ROWID=@Maxrow)
            --更新id元素文本
            UPDATE T2 
            SET CAOZUO.modify('replace value of (/CaoZuo/data/item/id/text())[1] with sql:variable("@aid")')
            FROM #TEMPS T1
            JOIN TECUL_XMCus T2 ON T1.ItemCode=T2.ItemCode AND T2.IsDelete=0
            WHERE T2.ItemCode=@ItemCode AND Dspid=@BatchID AND ROWID=@Maxrow
            --更新text元素文本    
            UPDATE T2 
            SET CAOZUO.modify('replace value of (/CaoZuo/data/item/text/text())[1] with sql:variable("@bid")')
            FROM #TEMPS T1
            JOIN TECUL_XMCus T2 ON T1.ItemCode=T2.ItemCode AND T2.IsDelete=0
            WHERE T2.ItemCode=@ItemCode AND Dspid=@BatchID AND ROWID=@Maxrow
        END
        END
    COMMIT TRAN
    END TRY
    BEGIN CATCH
    DECLARE @ERRORMES NVARCHAR(300)
    SET @ERRORMES=ERROR_MESSAGE()
    ROLLBACK TRAN
    END CATCH
    SET @Maxrow=@Maxrow-1
    END

-- SELECT * FROM  #TEMPS
-- DROP TABLE #TEMPS
END

 

免责声明:文章转载自《批量处理sql 数据存入xml类型列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP实现定时任务的几种方法2017 jq 总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CUPS

杯子:一个。工具1.hal设备管理器2.系统配置打印机3.Web管理器/etc/cups/ccups。conf/etc/cups/printer conf II。打印机本地安装和客户端安装1.在本地安装Linux打印机时,应选择postscript和pcl打印机。如果没有,则应将打印机设置为原始打印模式/etc/cups/printers。有限公司...

Nohup后台运行程序

场景:我现在需要跑脚本批量处理一些数据,但是我又不想盯着控制台看这个脚本的输出结果,想把这些输出结果记录到一个日志文件里面方案:可以使用Linux的nohup命令,把进程挂起,后台执行用法:$nohupXXXXXX.sh˃˃/runtime/deletedata.log&运行结果(这个数字是进程号):˃˃[1]13120有时候可能会报一个提示:$no...

ES6学习之对象的遍历

写在前面的话:在es6中一共有五种遍历对象的方法,如下:for...infor...in循环遍历对象自身的和继承的可枚举属性。Object.getOwnPropertySymbolsObject.getOwnPropertySymbols返回一个数组,包含对象自身的所有Symbol属性的键名。其结果为:从结果可以看出对boy对象的遍历可以得到他的直接身的属性...

【转载】 银河麒麟V10系统安装U盘制作

在制作U盘安装盘的过程中,Kylin系统的ISO映像文件比较大,因此很耗时。创建完成后,“写入硬盘映像”对话框将自动关闭。...

vue升级Babel支持可选链和合并空值运算符

据我所知,无论是webpack项目还是vite项目都需要使用到babel来编译文件。currentItem:tips;}//template使用传入对应的取值地址:string{{text_filter}}其他可玩的ES新特性通过babel的官网,我们可以看到babel支持的"ES新特性"参考:babeljs.io/docs/en/plu…挑几个有意思的说明...

Linux下如何确认磁盘是否为SSD

方法1:通过cat/sys/block/sda/queue/rotative查看/sys/block/sda/queet/rotative,返回值0为SSD;返回1表示HDD。方法2:通过lsscsi[root@ssd-testthatsit]#cat/sys/bl...