------OPENXML和MERGE联合使用的方法--------
来源:互联网 发布:用doc运行java编译乱码 编辑:程序博客网 时间:2024/05/18 03:11
在这里我直接拿项目中的代码来说明问题。大家一下就看懂了。
Use LvRuiGoif object_ID('[cuGiftCatagroy]') is not nullDrop Procedure [cuGiftCatagroy]Go/****************************************************************************************************************************************************************%%存储过程名:cuGiftCatagroy %%输入参数:exec cuGiftCatagroy'<GiftCatagroy Action="1"><ID>16</ID><!--ID--><GiftClassID>1</GiftClassID><CName>A</CName><Code>1000</Code><Remark>A</Remark><DisplayOrder>1</DisplayOrder><GiftCatagroySpecs Action="1"> <GiftCatagroySpec><ID>1</ID><!--ID--><GiftCatagroyID>16</GiftCatagroyID><SpecID>1</SpecID><SpecID>2</SpecID><SpecID>3</SpecID><SpecID>4</SpecID><Mandatory>1</Mandatory><DisaplayOrder>1</DisaplayOrder></GiftCatagroySpec></GiftCatagroySpecs></GiftCatagroy>',0,0%%输出参数:%%功能:新增记录在表Gift****************************************************************************************************************************************************************%%编写:fredrickhu ****************************************************************************************************************************************************************/CREATE PROCEDURE cuGiftCatagroy (@GiftCatagroy XML,@GiftCatagroyID INT=0 OUTPUT,@GiftCatagroySpecID INT=0 OUTPUT)ASSET NOCOUNT ON ;DECLARE @idoc INT,@NextNr INT,@IsCreate TINYINT,@Code VARCHAR(50)SELECT @NextNr=NextNr FROM NextSerialNr WHERE SerialNrTypeID=4SELECT @IsCreate=@GiftCatagroy.exist('GiftCatagroy[@Action=1]')BEGIN IF @IsCreate=1BEGIN UPDATE NextSerialNr SET NextNr=NextNr+1 WHERE SerialNrTypeID=4SET @Code='LP'+RIGHT(100+ROW_NUMBER()OVER(ORDER BY @NextNr)+@NextNr-1,2)END ELSE SET @Code='LP'+RIGHT(100+@NextNr-1,2)END EXEC sp_xml_preparedocument @idoc OUTPUT, @GiftCatagroyBEGIN TRYBEGIN TRAN--GiftCatagroyBEGIN ;MERGE GiftCatagroy AS TUSING(SELECT[GiftClassID],[CName],@Code AS [Code],[Remark],[DisplayOrder],ActionFROM OPENXML (@idoc, '@GiftCatagroy[@Action!=0]',3)WITH ([GiftClassID] SMALLINT 'GiftClassID[1]',[GiftNr] varchar(50) 'GiftNr[1]',[CName] nvarchar(50) 'CName[1]',[Code] varchar(50) 'Code[1]',[Remark] nvarchar(200) 'Remark[1]',[DisplayOrder] smallint 'DisplayOrder[1]',Action TINYINT '@Action')) AS S ON (S.GiftClassID=T.GiftClassID)WHEN MATCHED AND S.Action=2 THEN UPDATE SET /*GiftClassID=S.GiftClassID,*/[CName]=S.CName,[Code]=S.Code ,[Remark]=S.Remark ,[DisplayOrder]=S.DisplayOrder WHEN NOT MATCHED AND S.Action=1 THENINSERT ([GiftClassID],[CName],[Code],[Remark],[DisplayOrder])VALUES(S.GiftClassID,S.CName,S.Code,S.Remark,S.DisplayOrder);SET @GiftCatagroyID=SCOPE_IDENTITY()END --GiftCatagroySpecBEGIN ;MERGE GiftCatagroySpec AS TUSING(SELECT [ID],GiftCatagroyID,SpecID,Mandatory,DisplayOrder,ActionFROM OPENXML(@idoc, 'Gift/GiftCatagroySpecs/GiftCatagroySpec[@Action!=0]',3) WITH ([ID] INT 'ID[1]',[GiftCatagroyID] INT '../../ID[1]',[SpecID] smallint 'SpecID[1]',[Mandatory] BIT 'Mandatory[1]',[DisplayOrder] BIT 'DisaplayOrder[1]',Action TINYINT '@Action')) AS S ON S.ID=T.[ID]WHEN MATCHED AND S.Action=2 THENUPDATE SET GiftCatagroyID=S.GiftCatagroyID,SpecID=S.SpecID,Mandatory=S.Mandatory,DisplayOrder=S.DisplayOrderWHEN NOT MATCHED AND S.Action=1 THENINSERT ( GiftCatagroyID,SpecID,Mandatory,DisplayOrder)VALUES ( S.GiftCatagroyID,S.SpecID,S.Mandatory,S.DisplayOrder);SET @GiftCatagroySpecID=SCOPE_IDENTITY()END COMMIT TRANEND TRYBEGIN CATCHDECLARE @Error NVARCHAR(200)SET @Error=ERROR_MESSAGE()RAISERROR 50001 @ErrorROLLBACK TRANEND CATCHEXEC sp_xml_removedocument @idoc Go
0 0
- ------OPENXML和MERGE联合使用的方法--------
- 使用OPENXML(Using OpenXML)
- OpenXML 方法
- ISE14.7和modelsim的联合使用建立方法
- 模板方法和接口参数的联合使用
- 关于SqlServer中openxml的使用
- SQL 中 sp_xml_preparedocument,openxml的使用
- 关于C#和MYSQL的联合使用
- ScrollBar和Slider控件的联合使用
- 关于pvr和plist的联合使用
- GridView和DataSource的联合使用
- viewpager和Fragment的联合使用
- 联合变量的赋值和使用
- 联合变量的赋值和使用
- 关于Handler和BroadcastReceiver的联合使用
- UIPageControl和UIScrollView的联合使用
- struts2 的 @Result 和 @ResultPath 联合使用
- struts2 的 @Result 和 @ResultPath 联合使用
- 基于Linux下的UDP编程
- stm32f429discovery模板加入原子哥的延时串口和位带操作
- 还是觉得汇编有意思
- nvl(A,B)
- Linux内核中流量控制 http://blog.chinaunix.net/uid-127037-id-2919583.html
- ------OPENXML和MERGE联合使用的方法--------
- HBase的的管理笔记
- Eclipse 插件地址
- 任务切换
- Android系统的开机画面显示过程分析
- 页面嵌入优酷播放器
- 17岁女生被劫持16小时 主动找绑匪聊天脱险
- Bridge设计模式 + FilenameFilter总结
- 动态改变空间的位置和大小