SQLServer2008存储过程实现数据插入与更新

来源:脚本之家  责任编辑:小易  

如果必须同时插的话,建议你使用一个临时表。 在存储过程中先将数据整理的临时表中。假设临时表名叫temp,目标表名叫 result。 最后执行 insert into result select * from temp; 就可以讲 temp表中的数据 一次入到 目标表中了。

存储过程的功能非常强大,在某种程度上甚至可以替代业务逻辑层,

1、首先需要打开SQL Server Managment管理工具,新建一个表。 2、然后在表中插入一些样例数据。 3、接下来在SQL Server Managment中右键单击可编程性,选择新建存储过程。 4、然后在SQL编写界面中编写SQL语句,注意这里的@name就是接收的输入参

接下来就一个小例子来说明,用存储过程插入或更新语句。

两种方式 1、SQL有个charindex 函数,可以用这个函数配合substr实现 split功能实现循环插入 2、sql 2008以上存储过程支持表值参数,json反序列化在程序里更方便,所以反序列化之后通过表值参数传递

1、数据库表结构

数据是什么来源,文本、execl文件还是另一个数据库。

所用数据库为Sql Server2008。

不可能实现,批量插入时只要有一条数据不合要求,就会导致全部插入失败。 思路是:批量插入前,应严格检查数据是否符合表结构要求、索引要求等等。 其实SQL要求批量插入时数据必须完全正确,这是对你的数据负责。

2、创建存储过程

练习太极拳要放松,这里的放松,不仅是精神上要放松,周身肌肉也要放松。只有做到了放松,经络才能畅通无阻,气血才能够顺达充盈四肢百骸,这样才能够达到增长功力、健体强身的目的。所以,练习太极拳,能否放松,是至关重要的。

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

OPPO官方微博博文已经确认了“周杰伦”正式加入OPPO明星家族,并且周杰伦也会出席6月10日的OPPOR11发布盛典。可以说这次OPPO的手机新品发布会声势浩大,联合浙江卫视进行全国直播外更是请来了娱乐圈近乎半数的一线明星阵容,不少网友表示OPPO这次的R11发布盛典堪称史上最豪华手机发布会。为什么说它是史上最豪华呢?其中天王天后级歌手就包括了周杰伦、林俊杰、蔡依林、黄贯中、叶世荣、迪玛希、王俊凯、林忆莲、李宇春、孙燕姿。陈伟霆、李易峰、董子健、王大陆、张一山等一线影视演员,网友表示,如此豪华的明星阵容一同参加,OPPOR11发布盛典足以媲美大型颁奖典礼。OPPO还表示,这次的新机R11将会

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

据外媒报道,受昆虫眼睛的蜂窝型结构启发,斯坦福大学的科学家团队发现了一种研发钙钛矿太阳能电池的关键方法,这种方法将使电池更持久耐用。钙钛矿太阳能电池比传统的硅太阳能电池便宜且容易制造。这种钙钛矿材料用于太阳电池最早是在2009年。然而这种材料面临的一个问题是,与普通的硅太阳能电池相比,钙钛矿的盐状晶体结构使其非常脆弱。包括太阳能屋顶在内的绝大多数太阳能设备都是扁平设计。而水分、空气、热量,甚至长时间的阳光照射会使包括钙钛矿太阳能电池的太阳能设备容易损坏。为了解决这个问题,斯坦福大学的科学家团队从自然界寻找开发灵感——或更具体地观察昆虫的眼睛。他们苍蝇的眼睛由数千个六边形排列的感光体单元组成,并

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

一辆共享单车的生产周期与它们的备料、生产计划有关。到目前,ofo和摩拜投放单车辆数均已达100万辆,且仍在不断加大生产;摩拜已投放12座城市,有1000万用户。ofo投放40座城市,用户数量高达2000万。那么造一辆共享单车需要多少钱?摩拜生产一辆单车的成本在2300元,ofo单车轻便,造价成本低,每辆车成本在200~300元,其他品牌的共享单车普遍在千元以内。尽管共享单车在实际操作中面临着种种问题,但这并不妨碍它已成资本宠儿,融资节奏和资金额度都屡创新高。3月1日,ofo对外宣布已完成D轮融资,本次融资金额4.5亿美元。而摩拜在今年1月份也完成了第六轮融资,此轮融资过后,摩拜估值已经达到10

根据不同的情况设置存储过程的返回值,调用存储过程的时候,根据不同的返回值,进行相关的处理。

(2)下面编码只是实现的基本的功能,具体的Sql代码如下:

Create proc sp_Insert_Student @No char(10), @Name varchar(20), @Sex char(2), @Age int, @rtn int output as declare @tmpName varchar(20), @tmpSex char(2), @tmpAge int if exists(select * from Student where No=@No) begin select @tmpName=Name,@tmpSex=Sex,@tmpAge=Age from Student where No=@No if ((@tmpName=@Name) and (@tmpSex=@Sex) and (@tmpAge=@Age)) begin set @rtn=0 --有相同的数据,直接返回值 end else begin update Student set Name=@Name,Sex=@Sex,Age=@Age where No=@No set @rtn=2 --有主键相同的数据,进行更新处理 end end else begin insert into Student values(@No,@Name,@Sex,@Age) set @rtn=1 --没有相同的数据,进行插入处理 end

3、调用存储过程

这里在Sql Server环境中简单的实现了调用,在程序中调用也很方便。

具体的代码如下:

declare @rtn int exec sp_Insert_Student '1101','张三','男',23,@rtn output if @rtn=0 print '已经存在相同的。' else if @rtn=1 print '插入成功。' else print '更新成功'

一个存储过程就实现了3中情况,而且效率很高,使用灵活。 希望对大家有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

跪求大神解答 sql server如何利用存储过程批量导入更新数据

虽然有点模糊,不过我觉得你用嵌套查询+分组是可以达到目的的。比如安装商品名来分组:

select t1.商品名,t1.销售总数,t2.剩余库存 from (select 商品名,销售总数 from a,b,c where ...条件随便写..) as t1,(select 商品名,剩余库存 from a,b,c where ...条件随便写..) as t2where t1.商品名=t2.商品名group by 商品名

编写一个存储过程实现对表数据的删除 修改和添加!(sql server数据库)

1、使用账户和密码,连接到自己的数据库。

2、 找到自己的数据库->【可编程性】->存储过程。

3、 打开【存储过程】的子菜单,显示的存储过程如图所示。可以找到详细信息。

4、 选中存储过程,右键菜单中选择【修改】。

5、存储过程或者函数 显示代码如图所示,即可以修改。

6、或者右键菜单中选择【编写存储过程脚本为】->【ALERT到】->【新增编辑器窗口】,同样可以修改。

使用SQL SERVER 添加一个存储过程 将数据循环插入到另一个服务器

方案1:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [InsertData]

AS

BEGIN

    exec sp_addlinkedserver 'yuancheng','','SQLOLEDB','远程IP'  

    exec sp_addlinkedsrvlogin 'yuancheng','false',null,'远程数据库帐号','远程数据库密码'

    select * into yuancheng.数据库名.dbo.t_test from t_log

    delete from t_log

    exec sp_dropserver 'yuancheng','droplogins'  

END

方案2:

先开启Ad Hoc Distributed Queries组件

exec sp_configure 'show advanced options',1

reconfigure

exec sp_configure 'Ad Hoc Distributed Queries',1

reconfigure

然后创建存储过程

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [InsertData]

AS

BEGIN

    insert into openrowset('SQLOLEDB' ,'远程IP';'远程帐号';'远程密码',数据库名.dbo.t_test) select * from t_log

    delete from t_log

END

GO

 注意,如果远程的t_test表中有主键自增ID,必须先取消此列的标识属性,或者将除了主键列外的字段名在insert语句中列出,不过这样做就不能保证两边数据库的ID一致了

sqlserver2008 使用存储过程添加数据后,怎样获得添加的主键值?

如果是自增列主键的话,一般来说,插入后查询最大值就可以了

select max(pkID) from tablename;

还有一种方法

select @@identity追问插入的数据不止一条,怎样获得全部的主键值?追答你可以先生成一个唯一的key,然后把key传入存储过程,添加数据时把key一起存进去,然后根据key查询刚添加的数据!

也可以在存储过程中添加一个临时表#tablename!,然后每添加一条数据向#tablename中添加一个刚插入的数据的ID,然后最后select * from #tablename

还可以记录存储过程插入的条数,然后最后取select * from table where id=@@identity -条数(不过如果你存储过程执行的久的话,会出现很大的误差。。。)

sqlserver 存储过程循环插入或更新数据,数据错误时插入到临时的日志表中

没有看到对游标进行循环处理的语句。这个游标只执行了一次。所以出错的数据,是不是没有执行到?更多追问追答追问没有,我没贴出来,可以更新和插入,现在就是想测试如果某条数据报错,可以把表名和数据id记录到临时建的LOG表中追答try 和catch是发生异常的时候才触发,你说的数据报错,是什么样的错误,会引发系统的异常吗?追问

现在改了,改为调用一个存储Synchronous_LOG(只插入LOG数据),可是他又报事务的错,:当前事务无法提交,而且无法支持写入日志文件的操作请回滚该事务(注:调试时在Synchronous_LOG中几个变量值都获取到了,只是在插入表LOG时,报错,Synchronous_LOG中取消事务也一样报错,原存储Synchronous_PROVINCE又不能去掉事务),如下图:


  • 本文相关:
  • sql server 2008 存储过程示例
  • 如何在sql server 2008下轻松调试t-sql语句和存储过程
  • sqlserver2008查看表记录或者修改存储过程出现目录名无效错误解决方法
  • sqlserver 2008中的代码安全(一) 存储过程加密与安全上下文
  • sql server2008调试存储过程的完整步骤
  • win2008 r2安装sql server 2008 r2 不能打开1433端口设置方法
  • sql server查询时间技巧分享
  • sql server 2008+ reporting services (ssrs)使用user登录问题
  • sqlserver 2008中sql增强之二 top新用途
  • sql server 2008 r2 超详细安装图文教程
  • 深入sqlserver2008 数据库同步的两种方式(sql job)的分析介绍
  • sql server 2008r2编写脚本时智能提示功能丢失的处理方法
  • sql2008评估期已过的解决办法及序列号
  • sqlserver2008首次登录失败问题及解决方法
  • sql server 2008 无法附加数据库的解决方法
  • 跪求大神解答 sql server如何利用存储过程批量导入...
  • 编写一个存储过程实现对表数据的删除 修改和添加!...
  • 使用SQL SERVER 添加一个存储过程 将数据循环插入...
  • sqlserver2008 使用存储过程添加数据后,怎样获得...
  • sqlserver 存储过程循环插入或更新数据,数据错误...
  • SQL Server中 用存储过程 怎样 在同一时间向一张表...
  • 如何在sql创建一条插入数据的存储过程
  • SQL server存储过程实现JSON数据解析,然后插入数...
  • sqlserver 存储过程大批量数据插入
  • sql server数据库存储过程实现批量数据插入时跳过...
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved