批量处理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=

随便看看

前端chrome浏览器调试总结

以下选项允许您选择要捕获的项目。...

为什么运行CMD后,一闪就不见了 解决方案

方法1:如果您中毒,系统中的一个进程正在监视您的命令。如果您看到CMD,可以关闭它。您可以检查任务管理中是否有流程。如果你关闭它,你应该可以打开它。如果没有,则说明已注入系统进程。很难杀死病毒。方法2:注册表:HKEY_LOCAL__清除MACHINE Software Microsoft CommandProcessor AutoRun中的值,即删除带有d...

IDEA Gradle配置与使用

使用显式模块组,这意味着使用精确的模块组。单击+号并选择相关的。gradle文件以导入新模块。...

Uniapp 之小程序版本更新检查——uni.getUpdateManager()

constupdateManager=uni.getUpdateManager();updateManager.onCheckForUpdate;updateManager.onUpdateReady(function(res){uni.showModal({title:'更新提示',content:'新版本已经准备好,是否重启应用?',success{if...

Visual Studio 2017各版本安装包离线下载、安装全解析

VS2017的离线套餐包括所有选项。③ 根据您下载的VS2017版本,在打开的命令提示符窗口中输入以下相应命令,然后单击enter。程序启动后,您将开始下载企业版本:vs_enterprise。exe--layoutD:vs2017offline Professional:vs_ Professional。exe--layoutD:vs2017offline...

用itext生成PDF报错:Font 'STSong-Light1' with 'UniGB-UCS2-H' is not recognized.

使用itext生成PDF错误,trycatch捕获的异常为BaseFontbFont=BaseFont。createFont(“STSong-Light1”,“UniGB-UCS2-H”,BaseFont.NOT_EMBEDED);这行代码被抛出。在互联网上检查后,发现itext和itextasianjar包的版本不匹配。自5.x版本以来,itext已更名为...