sql server 存储过程、事务,增删改
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 存储过程、事务,增删改的更多相关文章
- Sql Server——数据的增删改
所谓数据的增删改就是在创建好数据库和表后向表中添加数据.删除表中的数据.更改表中的一些数据. 新增数据: 语法一: insert into 表名 values (数据内容) --这里需要 ...
- VS连接SQL Server数据库,增删改查详细教程(C#代码)_转载
工具: 1.Visual Studio (我使用的是vs2013) 2.SQL Server (我使用的是sql server2008) 操作: 1.打开SQL Server,打开后会看到数据库的初 ...
- python连接sql server数据库实现增删改查
简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...
- SQL server数据类型、增删改查
数据类型: 整数型:bigint.int.smallint.mediumint.tinyint 小数类型:decimal.numeric 浮点型:real.float.double 位型:bit 字符 ...
- C#winform窗体实现对sql server数据库的增删改查
1.运行效果截图 2.输入用户名,密码进行查询 查找成功则显示 查找不成功显示用户信息不存在 3.输入用户名与密码,向数据库中添加用户信息 添加后数据库表信息 4.查看全部信息 5.根据编号信息进行查 ...
- 【sql server常用操作{增删改查}】
use DB_x go drop database DB_y create database DB_y --创建数据库 on primary --指定主数据文件 ( name= ...
- sql server触发器中增删改判断
触发器生效逻辑 在Before或者After之后使用INSERT,DELETE,UPDATE 触发器内情况判断 插入 if exists(select 1 from inserted) and not ...
- SQL Server 约束的增删改
1. 非空约束 列的为空性决定表中的行是否可以包含空值.空置(NULL)不同于零(0)/空白或者长度为零的字符串(“”). (1)创建非空约束 create table orders ( docent ...
- SQL Server 数据的增删改
1. 使用Insert语句添加数据 (1)如果要向表中每一列都添加数据,则可以省略列明,直接将值按照顺序写入并用逗号隔开就行. use Howie ','JD','mars','CN','sh') ( ...
- SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...
随机推荐
- hdu 1010 Tempter of the Bone(dfs暴力)
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- 蓝桥杯 BASIC 29 高精度加法(大数)
[思路]:大数处理都一样. [AC代码]:代码细节能够美化一下. #include <iostream> #include <algorithm> #include <c ...
- 【(阶乘的质因数分解)算组合数】【TOJ4111】【Binomial efficient】
n<=10^6 m<=10^6 p=2^32 用unsigned int 可以避免取模 我写的SB超时 阶乘分解代码 #include <cstdio> #include &l ...
- 利用gridview实现计时消费,有点复杂,谁有好的方法可以讨论一下...
这是前段时间做项目遇到的一个问题,做出来的效果图如下, 由会员id查询出会员来,然后开始计费.然后点击结束消费,传到别的页面,主要就是结束时间和开始时间的一个时间差. 用到的数据表设计视图如下, 为了 ...
- asp.net 一个简单的登录控制
如果说一个网站需要用户登录后才能浏览,那么用户登录控制就不可避免.但是对于几百个以上的页面,不可能每个页面都做一次登录验证.因此,这需要在母版页中进行登录控制,这样就可以使得每一个使用这个母版页的子页 ...
- win server 2003 将MBR转为GPT突破硬盘2TB的限制(附微软磁盘科普)
备注:https://technet.microsoft.com/zh-cn/library/cc773223.aspx GUID 分区表 与支持最大卷为 2 TB (terabytes) 并且每个磁 ...
- Python同步数据库的数据到Neo4J
写了主要是步骤,如果疑问,请咨询QQ:5988628 Python版本采用2.7.X,默认的2.6.X后期会有问题,建议,一开始就升级Python.然后再安装pip. 访问数据库 sqlalchemy ...
- HDU 1033 - Edge
题目很水 然翻译感人 顺时针或者逆时针走,输出坐标 #include <iostream> using namespace std; ]; int p; ]={,,,-,}; ]={,,- ...
- Remove Element,Remove Duplicates from Sorted Array,Remove Duplicates from Sorted Array II
以下三个问题的典型的两个指针处理数组的问题,一个指针用于遍历,一个指针用于指向当前处理到位置 一:Remove Element Given an array and a value, remove a ...
- socket 通信之select
对于socket 通信,大家很多都用的单线程通信.同时只能监听一个端口,只能响应一个服务,select的方式可以解决多个socket 被连接的问题.一次可以分配多个资源,只要一个连接便可以进行通信.在 ...