开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 4721|回复: 2

SQL Server 表值参数和Merge语句配合更新明细数据示例

[复制链接]

0

精华

60

贡献

53

赞扬

帖子
73
软币
1545
在线时间
62 小时
注册时间
2013-6-8
发表于 2013-6-28 17:29:47 | 显示全部楼层 |阅读模式
应用场景:
批量更新数据库中表记录,同时进行增、删、改操作,如:单据明细提交。

示例SQL:
1.创建表值参数:
CREATE TYPE [Common].[ValueRange] AS TABLE(
[ValueID] [int] NULL,
[ValueCode] [dbo].[StandardCode] NOT NULL,
[ValueText] [nvarchar](64) NOT NULL,
[PYCode] [varchar](20) NULL,
[WBCode] [varchar](20) NULL,
[CategoryCode] [varchar](40) NOT NULL,
[isDisabled] [bit] NOT NULL,
[Remark] [nvarchar](64) NULL
)
GO

2.创建存储过程:
--该存储过程同时保存主表和明细表所有数据
create procedure [Common].[up_saveValueRangeWithCategory]
@categoryID int,
@categoryCode varchar(40),
@categoryName nvarchar(32),
@pyCode varchar(20),
@wbCode varchar(20),
@isStandard bit,
@isDisabled bit,
@remark nvarchar(64),
@valueRange Common.ValueRange readonly  --表值参数,.net中可使用Datatable,一次性保存所有明细数据
as
begin
if exists(select 1 from Common.ValueRangeCategory where CategoryCode = @categoryCode)
begin
  --更新值域分类
  update Common.ValueRangeCategory set CategoryCode = @categoryCode, CategoryName = @categoryName, PYCode = @pyCode, WBCode = @wbCode, isStandard = @isStandard, isDisabled = @isDisabled, Remark = @remark
  where CategoryID = @categoryID;
end else
begin
  insert into Common.ValueRangeCategory(CategoryCode, CategoryName, PYCode, WBCode, isStandard, isDisabled, Remark)
  values(@categoryCode, @categoryName, @pyCode, @wbCode, @isStandard, @isDisabled, @remark);
end;

--更新值域表  merge语句同时实现增删改
merge Common.ValueRange as t
using @valueRange as s
on s.ValueID = t.ValueID
when matched then  --存在则更新
  update set ValueCode = s.ValueCode, ValueText = s.ValueText, PYCode = s.PYCode, WBCode = s.WBCode, isDisabled = s.isDisabled, Remark = s.Remark
when not matched then  --不存在插入
  insert (ValueCode, ValueText, PYCode, WBCode, CategoryCode, isDisabled, Remark)
  values(s.ValueCode, s.ValueText, s.PYCode, s.WBCode, s.CategoryCode, s.isDisabled, s.Remark)
when not matched by source and t.CategoryCode = @categoryCode then  --标值参数数据中不存在则删除
  delete ;
end

GO

是不是很方便。

评分

参与人数 2赞扬 +2 收起 理由
jiongge + 1 Thanks
羽叶 + 1 赞一个

查看全部评分

回复

使用道具 举报

0

精华

5291

贡献

6059

赞扬

管理员

帖子
1176
软币
22629
在线时间
4467 小时
注册时间
2013-6-7

黄马甲

发表于 2013-6-28 17:32:49 | 显示全部楼层

回帖奖励 +1 软币

有软妹币拿
回复

使用道具 举报

0

精华

60

贡献

53

赞扬

帖子
73
软币
1545
在线时间
62 小时
注册时间
2013-6-8
 楼主| 发表于 2013-6-28 17:38:35 | 显示全部楼层

拿了也没什么用哦
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 21:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表