创建并在项目中调用SQLSERVER存储过程的简单示例

使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。创建存储过程   和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 

引用: Create PROC 存储过程名称     [参数列表(多个以“,”分隔)] AS SQL 语句 

例: 

引用: Create PROC upGetUserName @intUserId        INT, @ostrUserName NVARCHAR(20) OUTPUT                -- 要输出的参数 AS BEGIN         -- 将uName的值赋给 @ostrUserName 变量,即要输出的参数         Select @ostrUserName=uName FROM uUser Where [email protected] END 

  其中 Create PROC 语句(完整语句为Create PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和 @ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。 二、存储过程的调用 

  之前已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。存储过程建立好了,接下来就是要在应用程序里调用了,下面看一下在ASP程序里的调用。 

引用: Dim adoComm 
’// 创建一个对象,我们用来调用存储过程 Set adoComm = CreateObject("ADODB.Command") With adoComm         ’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象         .ActiveConnection = adoConn         ’// 类型为存储过程,adCmdStoredProc = 4         .CommandType = 4         ’// 存储过程名称         .CommandText = "upGetUserName"         ’// 设置用户编号         .Parameters.Item("@intUserId").Value = 1         ’// 执行存储过程         .Execute 

’// 取得从存储过程返回的用户名称         Response.Write "用户名:" & .Parameters.Item("@ostrUserName").Value End With ’// 释放对象 Set adoComm = Nothing 

  通过以上两步,已经可以创建和使用简单的存储过程了。下面来看一个稍微复杂点的存储过程,以进一步了解存储过程的应用。三、存储过程的实际应用 

  用户登录在ASP项目中经常会使用到,但使用存储过程来做验证可能不多,那么做例子,写一个简单的用户登录验证的存储过程。 

引用: Create PROC upUserLogin @strLoginName        NVARCHAR(20), @strLoginPwd        NVARCHAR(20), @blnReturn                BIT OUTPUT AS -- 定义一个临时用来保存密码的变量 DECLARE @strPwd NVARCHAR(20) BEGIN         -- 从表中查询当前用户的密码,赋值给 @strPwd 变量,下面要对他进行比较         Select @strPwd=uLoginPwd FROM uUser Where [email protected] 

IF @strLoginPwd = @strPwd                 BEGIN                         SET @blnReturn = 1                         -- 更新用户最后登录时间                         Update uUser SET uLastLogin=GETDATE() Where [email protected]rLoginName                END         ELSE                 SET @blnReturn = 0 END 

  用户登录的存储过程建立好了。注意,在一个区域内如果有多条语句时,必需使用BEGIN...END关键字。引用: Dim adoComm ’// 创建一个对象,我们用来调用存储过程 Set adoComm = CreateObject("ADODB.Command") With adoComm         ’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象         .ActiveConnection = adoConn         ’// 类型为存储过程,adCmdStoredProc = 4         .CommandType = 4         ’// 存储过程名称         .CommandText = "upUserLogin"         ’// 设置登录名称         .Parameters.Item("@strLoginName").Value = "***"         ’// 设置登录密码         .Parameters.Item("@strLoginPwd").Value = "123456"         ’// 执行存储过程         .Execute 

’// 判断是否登录成功         If .Parameters.Item("@blnReturn").Value = 1 Then                 Response.Write "恭喜你,登录成功!"         Else                 Response.Write "不是吧,好像错了哦。。。"         End If End With ’// 释放对象 Set adoComm = Nothing 

  通过以上的步骤,简单用户登录验证过程也做完了,现在只要把它整合到程序中就可以实现简单的用户登录验证了,关于其他细节就由你自己来处理了。   上面介绍的两个存储过程都是只返回一个值的,下面我们来看一个返回一个记录集的存储过程。 

引用: Create PROC upGetUserInfos @intUserGroup        INT AS BEGIN         -- 从数据库中抽取符合条件的数据         Select uName,uGroup,uLastLogin FROM uUser Where [email protected]         -- 插入一列合计         UNION         Select ’合计人数:’,COUNT(uGroup),NULL FROM uUser Where [email protected]END 

  现在我们来看一下ASP程序的调用。 

引用: Dim adoComm Dim adoRt ’// 创建一个对象,我们用来调用存储过程 Set adoComm = CreateObject("ADODB.Command") Set adoRs = CreateObject("ADODB.Recordset") With adoComm         ’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象         .ActiveConnection = adoConn         ’// 类型为存储过程,adCmdStoredProc = 4         .CommandType = 4         ’// 存储过程名称         .CommandText = "upGetUserInfos"         ’// 设置用户组         .Parameters.Item("@intUserGroup").Value = 1         ’// 执行存储过程,和以上几个例子不同,这里使用RecordSet的Open方法         adoRs.Open adoComm         ’// 显示第一个值         Response.write adoRs.Fields(0).Value End With ’// 释放对象 Set adoRs = Nothing Set adoComm = Nothing

最后让我们看看 SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据?
首先需要知道“另一个存储过程”的结果集的所有列的类型。 假设“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集如下CREATE PROCEDURE sp2ASDECLARE @t table(a int,b int,c int)

INSERT INTO @t(a,b,c)EXEC sp1

SELECT * FROM @t
时间: 2024-12-27 16:14:41

创建并在项目中调用SQLSERVER存储过程的简单示例的相关文章

在java中调用Oracle存储过程

在java中调用Oracle存储过程 本文介绍如何通过java来调用Oracle的存储过程 1. 编写存储过程 CREATE OR REPLACE PROCEDURE sp_pro3(sp_name VARCHAR2,sp_sal NUMBER ) IS BEGIN --根据用户名修改工资 UPDATE emp SET sal=sp_sal WHERE ename=sp_name; END; 引入jdbc6.jar,编写测试类Test.java package testOraclePro; im

在Windows Phone项目中调用C语言DLL

在Windows Phone项目中调用C语言写的DLL 最近接到一个需求,需要在WP里调用一个C语言写的DLL,并且说Android和iOS都可以,问我WP是否可以这样? 我说我调研一下,就有了下面的文章. 在传统C# WinForm 里调用Win32 DLL都不容易(可能用惯了C#),要用P/Invoke,然后DllImport什么什么,那WP里不是更麻烦? 先看看网上有没有可用的文章,结果还真找到devdiv中的文章,但其中有两处错误,所以我fix bug并且整理一下,然后展示给大家. 1.

JNI_Android项目中调用.so动态库

JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 参考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者介绍了如何使用Java代码调用DLL动态库中的C/C++方法,似乎已经是很久以前的做法了,遇到的错误笔者还未找到解决方案,但动态库着实是找到的,只是无法调用相应的方法.本篇博客来介绍一下如何在Android项目当中使用NDK生成.so动态链接库,并在程序中使用. 1. 在Eclipse中创建项目:T

mybatics 中调用mysql存储过程。

说起mybatics 框架,身边的java开发工程师们基本上都是耳熟能详. mybatics是apache的一个开源项目,前身为ibatics,2010年此项目由apache软件基金会迁移到了google code,mybatics的确是一款十分优秀的开源持久层框架,sql代码隔离封装.自动POJO映射.jdbc 动态sql---- mybatics的好处可以说出一箩筐,然而mybatics还有一个十分优秀的特性却往往被人忽略 ----那就是mybatics还支持存储过程的调用. 不熟悉存储过程

集算器调用数据库存储过程的代码示例

集算器可以方便的调用数据库的存储过程,这里通过例子来看一下具体的程序写法. 调用无返回值的存储过程 用oracle的存储过程为例,存储过程只有一个输入参数,没有输出参数: create orreplace procedure pro1 (pid IN VARCHAR) as begin insert into emp values(pid,'mike'); update emp set name='rose' where id=pid; commit; end; 在集算器中可以使用execute

JNI_Android项目中调用.so动态库实现详解

转自:http://www.yxkfw.com/?p=7223 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码声明三个本地方法. 3. 编译JNI

【MediaKit】WPF项目中 调用摄像头拍照的开发包

今天遇到一个 人事的项目,项目中需要调用摄像头给员工照相.如何解决这个问题呢? 介绍一个开发包给你,MediaKit.论坛里头的人都说好,但是黑兔觉得大家好才是真的好.你不妨试试~ 第一步:添加WPFMediaKit.dll 文件到项目中 第二步:把WPFMediaKit.dll文件引用进来. 步骤 右击引用->添加引用->浏览选项卡->选择WPFMediaKit.dll文件所在的位置. 第三步:在窗口顶端加入如下代码(注意不要该意记)就像using一个类样. xmlns:WPFMedi

JNI_Android 项目中调用.so动态库实现详解

转自:http://www.yxkfw.com/?p=7223 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码声明三个本地方法. 3. 编译JNI

JNI_Android项目中调用.so动态库实现详解【转】

转自 http://www.cnblogs.com/sevenyuan/p/4202759.html 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码