169it科技资讯
169it -->


当前位置:  数据库>sqlserver

SQLServer用存储过程实现插入更新数据示例

    来源: 互联网  发布时间:2014-10-14

实现

1)有相同的数据,直接返回(返回值:0);

2)有主键相同,但是数据不同的数据,进行更新处理(返回值:2);

3)没有数据,进行插入数据处理(返回值:1)。

【创建存储过程】

Create proc Insert_Update 

@Id varchar(20), 

@Name varchar(20), 

@Telephone varchar(20), 

@Address varchar(20), 

@Job varchar(20), 

@returnValue int output 

as 

declare 

@tmpName varchar(20), 

@tmpTelephone varchar(20),


@tmpJob varchar(20),

@tmpAddress varchar(20)

if exists(select * from dbo.DemoData where id=@Id) 

begin 

select @tmpName=Name,@tmpTelephone=Telephone,@tmpAddress=Address,@tmpJob=Job from dbo.DemoData where id=@Id 

if ((@tmpName=@Name) and (@tmpTelephone=@Telephone) and (@tmpAddress=@Address)and (@tmpJob=@Job)) 

begin 

set @returnValue=0 --有相同的数据,直接返回值 

end 

else 

begin 

update dbo.DemoData set Name=@Name,Telephone=@Telephone,Address=@Address,Job=@Job where id=@Id 

set @returnValue=2 --有主键相同的数据,进行更新处理 

end 

end 

else 

begin 

insert into dbo.DemoData values(@Id,@Name,@Telephone,@Address,@Job) 

set @returnValue=1 --没有相同的数据,进行插入处理 

end

【执行方式】

declare @returnValue int 
exec Insert_Update '15','hugh15','3823345','长安街','副部长',@returnValue output 
select @returnValue

返回值0,已经存在相同的

返回值1,插入成功

返回值2,更新成功


    
相关技术文章:
    ▪SqlServer中tempdb的日志机制原理解析及示例分享

     测试用例 我们分别在用户数据库(testpage),tempdb中创建相似对象t1,#t1,并在tempdb中创建创建非临时表,然后执行相应的insert脚本(用以产生日志),并记录执行时间用以比较用以比较说明tempdb”快” Code 用户数据库testpage use testpage go create table t1 ( id int identity(1,1) not null, str1 char(8000) ) declare @t datetime2=sysutcdatetime() declare @i int set @i=1 while (@i<100000) begin insert into t1 select @i,'aa' select @i=@i+1 end select [extime]=DATEDIFF(S,@t,sysutcdatetime()) tempdb use tempdb go create table #t1......


    ▪SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

     执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满。请备份该数据库的事务日志以释放一些日志空间。 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限。 在网上Google了很久,试了些方法都不行;数据库所在磁盘还有很大的可用空间,试着下重药了。 直接把tempdb的数据文件和日志文件的大小改为3000M, 问题解决。 记录一下清空日志的......


    ▪浅谈tempdb在SqlServer系统中的重要作用

     简介:        tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象。可以简单理解tempdb是SQLServer的速写板。应用程序与数据库都可以使用tempdb作为临时的数据存储区。一个实例的所有用户都共享一个Tempdb。很明显,这样的设计不是很好。当多个应用程序的数据库部署在同一台服务器上的时候,应用程序共享tempdb,如果开发人员不注意对Tempdb的使用就会造成这些数据库相互影响从而影响应用程序。 特性: 1、 tempdb中的任何数据在系统重新启动之后都不会持久存在。因为实际上每次SQLServer启动的时候都会重新创建tempdb。......


 
最新技术文章:
    ▪Sql Server里删除数据表中重复记录的例子

     [项目] 数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除! [分析] 1、生成一张临时表new_users,表结构与users表一样; 2、对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表;如果已经有了相同的项,则忽略此条记录; 3、把users表改为其它的名称,把new_users表改名为users,实现我们的需要。 [程序] 代码如下: declare ......


    ▪如何查看SQLSERVER中某个查询用了多少TempDB空间

         在SQL Server中,TempDB主要负责供下述三类情况使用: 内部使用(排序、hash join、work table等) 外部使用(临时表,表变量等) 行版本控制(乐观并发控制)       而对于内部使用,一些比较复杂的查询中由于涉及到了大量的并行、排序等操作时就需要大量的内存空间,每一个查询在开始时都会由SQL Server预估需要多少内存,在具体的执行过程中,如果授予的内存不足,则需要将多出来的部分由TempDB处理,这也就是所谓的Spill to TempDB。     通过下述语句可以观察到某个查询对TempDB造成了多少读写: ......


    ▪在SQL Server中使用ISNULL执行空值判断查询

     有如下查询: 代码如下: select isnull(lastchanged,'') as lastchanged from vhhostlist where s_comment='test202' 本来,ISNULL函数只有一个参数,它表示的含义就是判断这个参数的值是否为NULL,是NULL则返回TRUE,否则返回FALSE; 但是,在SQLServer的查询语句中,isnull需要两个参数,它的含义是如果参数1为NULL,则以参数2为isnull函数的返回值; 即,上面查询的的含义是,查询vhhostlist表中s_comment='test202'那一行lastchanged字段的值,如果它为NULL,则返回一个空字符串; 记得以前不懂这个的时候,遇到这样一......


 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2015,169IT.COM,站长邮箱:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号