CREATE procedure [dbo].[sp_TableSave]
@TypeID tinyint, -- 0 新增,1 修改,2 删除
@ID int,
@Name nvarchar(32),
@ProductIDs varchar(1024),
@BackColor nvarchar(128),
@UID int,
@Creator nvarchar(32),
@Error nvarchar(100)='' output
as
set nocount on
begin try
begin transaction -- 开始事务
declare @currDate SMALLDATETIME
SET @currDate=GETDATE()
if(@TypeID='') --修改
begin
update ProductActivity set Name=@Name,ProductIDs=@ProductIDs,Backcolor=@BackColor,IsPush=1 where ActivityID=@ID -- 更新移除产品log
insert into OperateLog(UID,UserName,Title,Content,CreateTime)
select @UID,@Creator,'更新',CAST(ProductID as varchar(10))+' /Activity:0',@currDate
from Product AS p
WHERE ActivityID=@ID and NOT EXISTS(
select 1 from dbo.F_split(@ProductIDs,',') AS t where t.f=p.ProductID
) -- 更新移除产品
update p set ActivityID=0,IsPush=(case when p.status=0 then 1 else 0 end)
from Product AS p
WHERE ActivityID=@ID and NOT EXISTS(
select 1 from dbo.F_split(@ProductIDs,',') AS t where t.f=p.ProductID
) -- 更新新增产品log
insert into OperateLog(UID,UserName,Title,Content,CreateTime)
select @UID,@Creator,'更新',CAST(ProductID as varchar(10))+' /Activity:'+CAST(@ID as varchar(10)),@currDate
from Product AS p
WHERE ActivityID<>@ID and EXISTS(
select 1 from dbo.F_split(@ProductIDs,',') AS t where t.f=p.ProductID
) -- 更新新增产品
update p set ActivityID=@ID,IsPush=(case when p.status=0 then 1 else 0 end)
from Product AS p
WHERE ActivityID<>@ID and EXISTS(
select 1 from dbo.F_split(@ProductIDs,',') AS t where t.f=p.ProductID
)
end
else if(@TypeID='') --删除
begin
-- 删除 ProductActivity
update ProductActivity set Status=1,IsPush=1 where ActivityID=@ID -- 写入product改动log
insert into OperateLog(UID,UserName,Title,Content,CreateTime)
select @UID,@Creator,'更新',cast(ProductID as varchar(10))+'/Activity:0',@currDate from Product where ActivityID=@ID -- 更新product
update Product set ActivityID=0,IsPush=(case when Product.status=0 then 1 else 0 end) where ActivityID=@ID
end
else --新增
begin
-- 更新ProductActivity表
declare @NewID int
insert into ProductActivity(Name,ProductIDs,Backcolor,Creator,CreateTime,IsPush)
values(@Name,@ProductIDs,@BackColor,@Creator,@currDate,1)
set @NewID = SCOPE_IDENTITY() -- 更新product表
update p set ActivityID=@NewID, IsPush=(case when p.Status=0 then 1 else 0 end)
FROM Product AS p
INNER JOIN dbo.F_split(@ProductIDs,',') AS t ON t.f=p.ProductID -- 写product改动log
insert into OperateLog(UID,UserName,Title,Content,CreateTime)
select @UID,@Creator,'更新', CAST(ProductID as varchar(10))+'/Activity:'+CAST(@NewID as varchar(10)),@currDate
from Product where ActivityID=@NewID
end
set @Error=''
commit transaction -- 提交事务
return;
end try
begin catch -- 异常
set @Error='1-'+ERROR_MESSAGE()
rollback transaction -- 回滚事务
return;
end catch

sql server 存储过程、事务,增删改的更多相关文章

  1. Sql Server——数据的增删改

    所谓数据的增删改就是在创建好数据库和表后向表中添加数据.删除表中的数据.更改表中的一些数据. 新增数据: 语法一: insert into 表名 values (数据内容)        --这里需要 ...

  2. VS连接SQL Server数据库,增删改查详细教程(C#代码)_转载

    工具: 1.Visual Studio (我使用的是vs2013) 2.SQL Server  (我使用的是sql server2008) 操作: 1.打开SQL Server,打开后会看到数据库的初 ...

  3. python连接sql server数据库实现增删改查

    简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...

  4. SQL server数据类型、增删改查

    数据类型: 整数型:bigint.int.smallint.mediumint.tinyint 小数类型:decimal.numeric 浮点型:real.float.double 位型:bit 字符 ...

  5. C#winform窗体实现对sql server数据库的增删改查

    1.运行效果截图 2.输入用户名,密码进行查询 查找成功则显示 查找不成功显示用户信息不存在 3.输入用户名与密码,向数据库中添加用户信息 添加后数据库表信息 4.查看全部信息 5.根据编号信息进行查 ...

  6. 【sql server常用操作{增删改查}】

    use DB_x   go   drop database DB_y   create database DB_y --创建数据库   on primary --指定主数据文件   (   name= ...

  7. sql server触发器中增删改判断

    触发器生效逻辑 在Before或者After之后使用INSERT,DELETE,UPDATE 触发器内情况判断 插入 if exists(select 1 from inserted) and not ...

  8. SQL Server 约束的增删改

    1. 非空约束 列的为空性决定表中的行是否可以包含空值.空置(NULL)不同于零(0)/空白或者长度为零的字符串(“”). (1)创建非空约束 create table orders ( docent ...

  9. SQL Server 数据的增删改

    1. 使用Insert语句添加数据 (1)如果要向表中每一列都添加数据,则可以省略列明,直接将值按照顺序写入并用逗号隔开就行. use Howie ','JD','mars','CN','sh') ( ...

  10. SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过

    存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...

随机推荐

  1. iOS 原生地图 开发

    iOS开发有时候用到地图,不少人第一想到的是用第三方.当然有时候为了和安卓同步,可能会一起使用某一第三方.但有时候,我们是可以用原生地图开发的.上面两个示意图是原生地图的自定义开发.运行demo,将展 ...

  2. The Balance(母函数)

    The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. Java替代C语言的可能性

        前不久CSDN刊登了一篇<C语言已经死了>的文章,引起了一些争论.事实上那篇文章是从Ed Burnette的博客上转载来的,原文题目是“Die, C, die!”,直译过来应该是& ...

  4. 【十分不错】【离线+树状数组】【TOJ4105】【Lines Counting】

    On the number axis, there are N lines. The two endpoints L and R of each line are integer. Give you ...

  5. memcached 内存管理 分析(转)

    Memcached是一个高效的分布式内存cache,了解memcached的内存管理机制,便于我们理解memcached,让我们可以针对我们数据特点进行调优,让其更好的为我所用.这里简单谈一下我对me ...

  6. Asp.Net Web API 2

    Asp.Net Web API 2第十八课——Working with Entity Relations in OData   前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导 ...

  7. js获取随机颜色

    var bg_colour = Math.floor(Math.random() * 16777215).toString(16); bg_colour = "#" + (&quo ...

  8. matlab中norm与svd函数用法

    格式:n=norm(A,p) 功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释: NORM Matrix or vector ...

  9. Hibernate中load与get的区别

    1.get()采用立即加载方式,而load()采用延迟加载; ①get()方法执行的时候,会立即向数据库发出查询语句;(查询顺序:内部缓存,数据库) ②load()方法返回的是一个代理(此代理中只有一 ...

  10. Spring学习之切入点表达式

    链接地址:http://jinnianshilongnian.iteye.com/blog/1415606