GVKun编程网logo

sqlserver存储过程test(sqlserver存储过程加密解密)

17

本文将为您提供关于sqlserver存储过程test的详细介绍,我们还将为您解释sqlserver存储过程加密解密的相关知识,同时,我们还将为您提供关于Hibernate调用sqlserver存储过程

本文将为您提供关于sqlserver存储过程test的详细介绍,我们还将为您解释sqlserver存储过程加密解密的相关知识,同时,我们还将为您提供关于Hibernate 调用sqlserver存储过程、sqlserver存储过程、SqlServer存储过程介绍、sqlserver存储过程入门的实用信息。

本文目录一览:

sqlserver存储过程test(sqlserver存储过程加密解密)

sqlserver存储过程test(sqlserver存储过程加密解密)

IF EXISTS (
SELECT
*
FROM
sysobjects
WHERE
name = ‘pro_reduce_stock‘
) DROP PROCEDURE pro_reduce_stock
GO
CREATE PROCEDURE pro_reduce_stock
  @wareHouseId bigint,
  @detailId bigint,
  @detailNum INT
AS
BEGIN
BEGIN TRANSACTION
BEGIN try
      --扣减物料 
CREATE TABLE #bomTemp
(
id INT IDENTITY(1,1),
product_detail_id bigint,
item_id bigint,
item_num INT
)
INSERT #bomTemp(product_detail_id,item_id,item_num) SELECT product_detail_id,item_num FROM op_product_bom WHERE [email protected]
DECLARE @currentIndex INT  
DECLARE @totalRows    INT  
SELECT @currentIndex=1  
SELECT @totalRows=COUNT(1) FROM #bomTemp
DECLARE @materielId INT  
DECLARE @materielNum INT
SELECT @materielId=0  
SELECT @materielNum=0  
WHILE(@currentIndex< [email protected])  
BEGIN   
SELECT @materielId=item_id FROM #bomTemp WHERE [email protected]
SELECT @materielNum=item_num FROM #bomTemp WHERE [email protected]  
--UPDATE scm_stock_num SET [email protected]*@materielNum WHERE [email protected] AND [email protected]
SELECT @ [email protected]+1;  
END  
      --扣减商品明细
      --UPDATE scm_stock_num SET [email protected] WHERE [email protected] AND [email protected]
COMMIT TRANSACTION
END try
BEGIN catch
ROLLBACK TRANSACTION
END catch
END

Hibernate 调用sqlserver存储过程

Hibernate 调用sqlserver存储过程

存储 过程 : if exists(select name from sysobjects where name=''person_select'' and type=''P'') drop proceduredbo.person_select go create proc dbo.person_select as select * from person go hibernate.hbm.xml: pojo就不写了直奔主题 我是在dao的实现

Hibernate 调用sqlserver存储过程

存储过程

if exists(select name from sysobjects where name=''person_select'' and
type=''P'')
 drop procedure dbo.person_select
go
 create proc dbo.person_select
 as
  select * from person
go

hibernate.hbm.xml:

Hibernate 调用sqlserver存储过程

pojo就不写了直奔主题

我是在dao的实现类DaoImpl里面写的主要方法:

这是引入的包

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.hibernate.HibernateException;
import org.hibernate.Session;

下面是实现方法

public List findAllPersons_proc() {
   System.out.println("0----------------");
  return (List)getHibernateTemplate().execute(new HibernateCallback() {
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException {
     String hql = "{call person_select}";
     session.flush();
     ResultSet rs=session.connection().prepareCall(hql).executeQuery();
     List list=new ArrayList();
     while (rs.next()) {
      Person p=new Person();
      p.setId(rs.getInt(1));
      p.setName(rs.getString(2));
      p.setAge(rs.getInt(3));
      list.add(p);
     }
     rs.close();
     session.close();
     return list;
    }
   });
 }

用的时候直接Action调用service,service调用dao,调到该方法就可

serice实现类serviceImpl:

Hibernate 调用sqlserver存储过程


Action 方法:

Hibernate 调用sqlserver存储过程

其余的增删改查可以类似写法即可

这是查

session.connection().prepareCall(hql).executeQuery();

改executeQuery();为executeUpdate就行 。。。。。。。等等的
---------------------lieh


 hibernate调sqlserver存储过程,做插入操作

sqlserver:存储过程  传进来三个参数

if exists(select name from sysobjects where name=''person_save'' and
type=''P'')
 drop procedure dbo.person_save
go
 create proc dbo.person_save
  @id varchar(20),
  @name varchar(20),
  @age varchar(20)
 as
  insert into person
  values
  (@id,@name,@age)
 return
go

然后在person.hbm.xml里面这个存储过程配置如下:


     
     

     {call person_save(?,?,?)}

DaoImpl里面的方法:  --这是一个无返回值的方法

public void savePersons_proc(final String id,final String name,final String age) {

 //参数要是final类型的,否则在下面用的时候得不到参数

//dao 里面的  void savePersons_proc(String id,String name,String age);可以这样写
  System.out.println("0----------------");
  getHibernateTemplate().execute(new HibernateCallback() {
   public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
       String hql = "{call person_save(?,?,?)}";
       session.flush();
       CallableStatement casm=session.connection().prepareCall(hql);
       System.out.println("----------DaoIMpl----------");
       casm.setString(1, id);//设置参数值
       casm.setString(2, name);
       casm.setString(3, age);
       casm.execute();
       return null;
   }
  });
 }

这是一个有返回值的方法:

public boolean savePersons_proc2(String id,String name,String age) {
  System.out.println("0----------------");
  try {
   Session session=getHibernateTemplate().getSessionFactory().openSession();
   session.flush();
   CallableStatement cs=session.connection().prepareCall("{call person_save(?,?,?)}");
   cs.setString(1, id);
   cs.setString(2, name);
   cs.setString(3, age);
   boolean b=false;
//   b=cs.execute();

//使用execute,返回值不知为啥为false,存储过程成功执行了,数据库数据也插入了,但就是返回为false;
   int i=cs.executeUpdate();
//这里因为我的存储过程直插入了一行数据,所有如果成功执行存储过程,那么返回值必定是1,

//换言之,如果我的存储过程执行力四行插入数据的话,如此成功执行,则返回值必定是4

// 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和

//DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。

//executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP

//TABLE 等不操作行的语句,executeUpdate 的返回值总为零。 

//所有对i的值进行判断,来确定返回值

    if(i==1){

      b=true;

    }
   return b;
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println("------dao impl false  Exce...------");
   return false;
  }
 }

方法executeQuery
   用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。
  
   方法executeUpdate
   用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
  
   使用executeUpdate方法是因为在 createTableCoffees 中的 SQL 语句是 DDL (数据定义语言)语句。创建表,改变表,删除表都是 DDL 语句的例子,要用 executeUpdate 方法来执行。你也可以从它的名字里看出,方法 executeUpdate 也被用于执行更新表 SQL 语句。实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。

    方法execute:
   用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能
  
   execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程 或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。
   因为方法 execute 处理非常规情况,所以获取其结果需要一些特殊处理并不足为怪。例如,假定已知某个过程返回两个结果集,则在使用方法 execute 执行该过程后,必须调用方法 getResultSet 获得第一个结果集,然后调用适当的 getXXX 方法获取其中的值。要获得第二个结果集,需要先调用 getMoreResults 方法,然后再调用 getResultSet 方法。如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用 getMoreResults,并再次调用 getUpdateCount。
   对于不知道返回内容,则情况更为复杂。如果结果是 ResultSet 对象,则方法 execute 返回 true;如果结果是 Java int,则返回 false。如果返回 int,则意味着结果是更新计数或执行的语句是 DDL 命令。在调用方法 execute 之后要做的第一件事情是调用 getResultSet 或 getUpdateCount。调用方法 getResultSet 可以获得两个或多个 ResultSet 对象中第一个对象;或调用方法 getUpdateCount 可以获得两个或多个更新计数中第一个更新计数的内容。
   当 SQL 语句的结果不是结果集时,则方法 getResultSet 将返回 null。这可能意味着结果是一个更新计数或没有其它结果。在这种情况下,判断 null 真正含义的唯一方法是调用方法 getUpdateCount,它将返回一个整数。这个整数为调用语句所影响的行数;如果为 -1 则表示结果是结果集或没有结果。如果方法 getResultSet 已返回 null(表示结果不是 ResultSet 对象),则返回值 -1 表示没有其它结果。也就是说,当下列条件为真时表示没有结果(或没有其它结果):
  
  ((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1))
  
   如果已经调用方法 getResultSet 并处理了它返回的 ResultSet 对象,则有必要调用方法 getMoreResults 以确定是否有其它结果集或更新计数。如果 getMoreResults 返回 true,则需要再次调用 getResultSet 来检索下一个结果集。如上所述,如果 getResultSet 返回 null,则需要调用 getUpdateCount 来检查 null 是表示结果为更新计数还是表示没有其它结果。
  
   当 getMoreResults 返回 false 时,它表示该 SQL 语句返回一个更新计数或没有其它结果。因此需要调用方法 getUpdateCount 来检查它是哪一种情况。在这种情况下,当下列条件为真时表示没有其它结果:
  
  ((stmt.getMoreResults() == false) && (stmt.getUpdateCount() == -1))
  
   下面的代码演示了一种方法用来确认已访问调用方法 execute 所产生的全部结果集和更新计数:
  
  
  stmt.execute(queryStringWithUnknownResults);
  while (true) {
  int rowCount = stmt.getUpdateCount();
  if (rowCount > 0) { // 它是更新计数
  System.out.println("Rows changed = " + count);
  stmt.getMoreResults();
  continue;
  }
  if (rowCount == 0) { // DDL 命令或 0 个更新
  System.out.println(" No rows changed or statement was DDL
  command");
  stmt.getMoreResults();
  continue;
  }
  
  // 执行到这里,证明有一个结果集
  // 或没有其它结果
  
  ResultSet rs = stmt.getResultSet;
  if (rs != null) {
  . . . // 使用元数据获得关于结果集列的信息
  while (rs.next()) {
  . . . // 处理结果
  stmt.getMoreResults();
  continue;
  }
  break; // 没有其它结果


sqlserver存储过程

sqlserver存储过程

工作这么久了,但不会存储过程,决定抽时间学习下.

例子一 新建存储过程
    CREATE PROCEDURE hello
    as
    select top 2 * from  student;
    新建立一个名为hello的存储过程
    调用: hello
例子二 修改存储过程
  修改存储过程,设置需要传入参数xid
  ALTER PROCEDURE  hello   @xid  int         // 声明要传入int类型的参数,形参名为xid
  as

  select top 2 * from  student where id = @xid
  调用: hello 123
          hello @xid = 123

 例三 带输出参数的存储过程
   ALTER PROCEDURE hello
        @idx int,
        @count int output
   AS
      select @count=count(*)  from TableA where id = @idx

调用:

   declare @countxx int
   exec hello 61082,@countxx output
   print @countxx

  例四 分页存储过程


SqlServer存储过程介绍

SqlServer存储过程介绍

存储过程定义

存储的过程 (存储过程(数据库引擎)) 是存储在数据库中的可执行对象。

存储过程分类

系统存储过程

  系统存储过程是 SQL Server系统自身提供的存储过程,可以作为命令执行各种操作。

  系统存储过程主要用来从系统表中获取信息,使用系统存储过程完成数据库服务器的管理工作,为系统管理员提供帮助,为用户查看数据库对象提供方便,系统存储过程位于数据库服务器中,并且以sp_开头,系统存储过程定义在系统定义和用户定义的数据库中,在调用时不必在存储过程前加数据库限定名。SQL SERVER服务器中许多的管理工作都是通过执行系统存储过程来完成的,许多系统信息也可以通过执行系统存储过程来获得。

  系统存储过程创建并存放在与系统数据库master中,一些系统存储过程只能由系统管理员使用,而有些系统存储过程通过授权可以被其它用户所使用。

用户存储过程(自定义存储过程)

  自定义存储过程即用户使用T_SQL语句编写的、为了实现某一特定业务需求,在用户数据库中编写的T_SQL语句集合,自定义存储过程可以接受输入参数、向客户端返回结果和信息,返回输出参数等。创建自定义存储过程时,存储过程名前加上"##"表示创建了一个全局的临时存储过程;存储过程前面加上"#"时,表示创建的局部临时存储过程。局部临时存储过程只能在创建它的回话中使用,会话结束时,将被删除。这两种存储过程都存储在tempdb数据库中。

用户定义的存储过程分为两类:T_SQL 和CLR

T_SQL:存储过程是值保存的T_SQL语句集合,可以接受和返回用户提供的参数,存储过程也可能从数据库向客户端应用程序返回数据。

CLR存储过程是指引用Microsoft.NET Framework公共语言的方法存储过程,可以接受和返回用户提供的参数,它们在.NET Framework程序集是作为类的公共静态方法实现的。

扩展存储过程

 扩展存储过程是以在SQL SERVER环境外执行的动态连接(DLL文件)来实现的,可以加载到SQL SERVER实例运行的地址空间中执行,扩展存储过程可以用SQL SERVER扩展存储过程API编程,扩展存储过程以前缀"xp_"来标识,对于用户来说,扩展存储过程和普通话存储过程一样,可以用相同的方法来执行。 

存储过程创建

存储过程可以有零个或多个参数。

你可以使用存储的过程调用从外部例程 Microsoft SQL Server Analysis Services。

你可以在任何公共语言运行时 (CLR) 语言(例如 C、C++、C#、Visual Basic 或 Visual Basic .NET)中编写由存储过程调用的外部例程。

存储过程可以一次创建并从许多上下文中进行调用,例如其他存储过程、计算度量值或客户端应用程序。 

程序集通过使通用代码可以一次开发并存储在单个位置中,简化Analysis Services 数据库开发和实现。 

存储过程可用来向应用程序中添加 MDX 的本机功能未提供的商业功能。

存储过程输入

通过指定过程参数,调用程序可以将值传递给过程的主体。 

在执行过程期间,这些值可以用于各种目的。 

如果将参数标记为 OUTPUT 参数,则过程参数还可以将值返回给调用程序。

一个过程最多可以有 2100 个参数,每个参数都有名称、数据类型和方向。 还可以为参数指定默认值(可选)。

存储过程调用

可以在服务器上或从客户端应用程序中调用存储过程。 

在任何一种情况下,存储过程都始终运行于服务器上,或者使用服务器的上下文,或者使用数据库的上下文。 

执行存储过程时,不需要具备特殊的权限。 

存储过程由程序集添加到服务器或数据库上下文后,只要用户的角色允许执行存储过程所执行的操作,则任何用户均可执行该存储过程。

存储过程输出

过程中的每一条 SELECT 语句都生成一个结果集。

过程可以通过输出参数返回数据。

过程可以具有整数返回代码。

存储过程优点

1、提高性能。

2、降低网络开销。

3、提供更好的一致性。

4、提高准确性。

5、增加功能。

存储过程缺点

1、数据库移植不方便,存储过程依赖与数据库管理系统, SQL Server 存储过程中封装的操作代码不能直接移植到其他的数据库管理系统中。

2、不支持面向对象的设计,无法采用面向对象的方式将逻辑业务进行封装,甚至形成通用的可支持服务的业务逻辑框架。

3、代码可读性差,不易维护。不支持集群。

4、不便于调试。

sqlserver存储过程入门

sqlserver存储过程入门

sqlserver存储过程入门

1. 输入/输出参数定义

@object_name varchar(50)  //定义一个varchar类型的输入参数
@object_index int
@isUpdate int  =0  output //定义一个输出参数

2.游标使用步骤

1、定义游标
DECLARE cur_objsName CURSOR for select name from tb_user;
2、打开游标
OPEN cur_objsName;
3、提取游标数据,进行业务处理
while @@fetch_status = 0   --如果上一次操作成功则继续循环  
	begin
		update tb_user set calss=''三年级5班'' 	
		FETCH  NEXT FROM cur_objsName INTO 	
	end
4、关闭游标
CLOSE cur_objsName;
5、释放游标
deallocate cur_objsName;

3.简单示例

生产环境中会需要对软件的版本进行升级,会相应的升级数据库。当老版本软件退役,新版本软件上线时。会根据数据表结构的更新来进行数据迁移。
示例:根据输入对象名称,和列名,判断表对象结构是否进行了更新
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	判断表对象结构是否进行了更新
-- =============================================
alter PROCEDURE [dbo].[getIsUpdate]
	@object_name varchar(50),
	@contrast_column_name varchar(50),
	@isUpdate int  =0  output           -- 1= 是, 0=否
AS 
BEGIN
	-----------定义游标----------------
	DECLARE cur_objsName CURSOR for select name from sys.all_columns where object_id = object_id(@object_name);
	declare @column_name varchar(50)  
-----------打开游标----------------
	OPEN cur_objsName;
-----------------从游标里取出数据赋值到我们刚才声明的变量中(移动游标指向到第一条数据,提取第一条数据存放在变量中)    
	FETCH NEXT FROM cur_objsName INTO @column_name   
--判断游标的状态    
-- 0 fetch语句成功        
---1 fetch语句失败或此行不在结果集中        
---2 被提取的行不存在  
	while @@fetch_status = 0   --如果上一次操作成功则继续循环  
		begin
			if @contrast_column_name=@column_name
				set @isUpdate =1
			FETCH  NEXT FROM cur_objsName INTO @column_name	
		end
END
-----------关闭游标----------------
	CLOSE cur_objsName;
-----------释放游标----------------
	deallocate cur_objsName;

3.1SQLserver2005企业管理器中执行存储过程

1、执行存储过程

2、填写输入参数

3、查看查询结果

4.powerbuilder中调用存储过程

int returnValue
Declare stu_getIsUpdate Procedure For getIsUpdate // 定义过程调用
@object_name=''tb_user'',  @contrast_column_name=''faction'',   
@isUpdate=0 output;
Execute stu_getIsUpdate ;// 执行过程,这里是不需要其他参数的

If SQLCA.SQLCode <> 0 Then // 调用过程出现错误处理
	messagebox(''提示'',''数据库升级时出现错误:getIsUpdate........'')
	return
End If
Fetch stu_getIsUpdate Into :returnValue;
// 获取出参值,也就是OUT的变量,如果没有out类型的变量,这句也就不需要了
If SQLCA.SQLCode <> 0 Then // 获取数据出现错误处理
	messagebox(''提示'',''数据库升级时出现错误:getIsUpdate........'')
	return
End If
Close stu_getIsUpdate ;	
if  returnValue=0 then
	//根据存储过程返回值,来执行相应业务逻辑
end if

5.使用Visual Studio 进行存储过程的调试

1、打开visual studio 2013,单击“视图”,选择“服务器资源管理器”。

2、右键单击“数据连接”,选择“添加连接”

3、在弹出的窗口中选择“Microsoft SQL Server”或者“Microsoft SQL Server数据库文件”

4、在第三步基础上进行配置,这一步根据第三步选择选项不同,进行配置的内容不同,但都比较简单,不做描述。

5、添加连接完成之后,点击“存储过程”,选择你要调试的存储过程,右键单击,选择“执行”,在弹出窗口中输入相应参数(如果有的话)

6、在打开的选项卡窗口中点击绿色按钮右边的下拉按钮,选择“使用调试器执行”,开始调试。

7、调试时,可以按F11或者F10进行步进或者过程进,进行调试,调试时把鼠标放到变量上即可查看变量的值

简单示例

5.欢迎关注微信公众号

关于sqlserver存储过程testsqlserver存储过程加密解密的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Hibernate 调用sqlserver存储过程、sqlserver存储过程、SqlServer存储过程介绍、sqlserver存储过程入门等相关内容,可以在本站寻找。

本文标签: