`
shirlly
  • 浏览: 1647934 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

存储过程 与 SQL Server语句大比拼

阅读更多

本文从多个角度阐述了SQL Server与存储过程的比较。

①为什么要使用存储过程?

因为它比SQL语句执行快。

②存储过程是什么?

把一堆SQL语句罗在一起,还可以根据条件执行不通SQL语句。

③来一个最简单的存储过程:

CREATE PROCEDURE dbo.testProcedure_AX
AS
select userID from
USERS order by userid desc


注:dbo.testProcedure_AX是你创建的存储过程名,可以改为:AXzhz等,别跟关键字冲突就行了.AS下面就是一条SQL语句,不会写SQL语句的请回避。

④怎么在ASP.NET中调用这个存储过程:


public static string GetCustomerCName
(ref ArrayList arrayCName,ref ArrayList arrayID)
        {
            SqlConnection con=ADConnection.createConnection();
            SqlCommand cmd=new SqlCommand("testProcedure_AX",con);
            cmd.CommandType=CommandType.StoredProcedure;
            con.Open();
            try
            {
                SqlDataReader dr=cmd.ExecuteReader();
                while(dr.Read())
                {
                    if(dr[0].ToString()=="")
                    {
                        arrayCName.Add(dr[1].ToString());
                    }
                }
                con.Close();
                return "OK!";
            }
            catch(Exception ex)
            {
                con.Close();
                return ex.ToString();
            }
        }


注:其实就是把以前:

SqlCommand cmd=new SqlCommand("select
userID from USERS order by userid desc",con);


中的SQL语句替换为存储过程名,再把cmd的类型标注为CommandType.StoredProcedure(存储过程)。


⑤写个带参数的存储过程:



CREATE PROCEDURE dbo.AXzhz
/*
这里写注释
*/
@startDate varchar(16),
@endDate varchar(16)
AS
select id  from table_AX where commentDateTime>
@startDate and commentDateTime<@endDate order
by contentownerid DESC


注:@startDate varchar(16)是声明@startDate 这个变量,多个变量名间用【,】隔开.后面的SQL就可以使用这个变量了。


⑥我怎么在ASP.NET中调用这个带参数的存储过程:


public static string GetCustomerCNameCount
(string startDate,string endDate,ref DataSet ds)
{
            SqlConnection con=ADConnection.createConnection();
//-----------------------注意这一段-------------------
--------------------------------------------------------
-----------------------------
            SqlDataAdapter da=new SqlDataAdapter("AXzhz",con);

            para0=new SqlParameter("@startDate",startDate);
            para1=new SqlParameter("@endDate",endDate);
            da.SelectCommand.Parameters.Add(para0);
            da.SelectCommand.Parameters.Add(para1);
            da.SelectCommand.CommandType=CommandType.StoredProcedure;
//-------------------------------------------------------------
------------------------------------------------------------------


            try
            {
                con.Open();
                da.Fill(ds);
                con.Close();
                return "OK";
            }
            catch(Exception ex)
            {
                return ex.ToString();
            }           
        }


注:把命令的参数添加进去,就可以了。

⑦重新验证SQL命令执行是否成功。


CREATE PROCEDURE dbo.AXzhz
/*
  @parameter1 用户名
  @parameter2 新密码
*/
@password nvarchar(20),
@userName nvarchar(20)
AS
declare @err0 int
update WL_user set password=@password where UserName=@userName
set @err0=@@error
select  @err0 as err0


注:先声明一个整型变量@err0,再给其赋值为@@error(这个是系统自动给出的语句是否执行成功,0为成功,其它为失败),最后通过select把它选择出来。

⑧那怎么从后台获得这个执行成功与否的值:

下面这段代码可以告诉你答案:

public static string GetCustomerCName()
        {
            SqlConnection con=ADConnection.createConnection();
           
            SqlCommand cmd=new SqlCommand("AXzhz",con);
            cmd.CommandType=CommandType.StoredProcedure;
            para0=new SqlParameter("@startDate","2006-9-10");
            para1=new SqlParameter("@endDate","2006-9-20");
            da.SelectCommand.Parameters.Add(para0);
            da.SelectCommand.Parameters.Add(para1);
            con.Open();
            try
            {
               Int32 re=(int32)cmd.ExecuteScalar();
                con.Close();
                if (re==0)
                 return "OK!";
                else
                 return "false";
            }
            catch(Exception ex)
            {
                con.Close();
                return ex.ToString();
            }
        }


注:就是通过SqlCommand的ExecuteScalar()方法取回这个值。

⑨我要根据传入的参数判断执行哪条SQL语句:


ALTER PROCEDURE dbo.selectCustomerCNameCount
@customerID int
AS
if @customerID=-1
begin
select contentownerid ,userCName,count(*)
as countAll from view_usercomment group by
contentownerid,userCName order by contentownerid DESC
end
else
begin
select contentownerid ,userCName,count(*)
as countAll from view_usercomment where
contentownerid=@customerID group by contentownerid
,userCName order by contentownerid DESC
end


分享到:
评论

相关推荐

    存储过程与SQL Server语句大比拼

    在数据库管理和编程领域,SQL Server是一种广泛使用的关系型数据库管理系统,而存储过程是SQL Server中的一个重要概念。存储过程是由一组预编译的SQL语句组成的程序,它可以包含控制流语句,并且可以在数据库服务器...

    oracle到sqlserver存储过程语法转换

    通过上述对比,可以看出Oracle和SQL Server在存储过程的语法上有许多不同之处。在进行数据库迁移时,开发者需要仔细分析现有的Oracle存储过程,然后根据SQL Server的语法特点进行相应的转换。此外,还应考虑到性能...

    SQL server语句的学习

    本压缩包“SQL server语句的学习”旨在提供SQL Server语句的具体实例,帮助学习者深入理解并熟练掌握SQL Server的查询操作。 首先,我们关注的是标签“SQL Server select语句”,这是SQL中最基础也是最常用的语句之...

    SQL Server存储过程对比工具

    SQL Server存储过程对比工具是一种高效且实用的软件解决方案,它专为数据库管理员和开发人员设计,用于比较和分析两个SQL Server数据库中的存储过程。这款工具的主要功能是帮助用户快速识别和定位不同数据库间存储...

    sql Server 数据库对比工具

    存储过程对比能找出两个数据库中存储过程的定义差异,包括过程体内的SQL语句、输入/输出参数、返回值等。这有助于在不同环境之间同步存储过程逻辑。 4. **索引对比**: 索引是提升数据库查询性能的关键因素。索引...

    SQL Server转换为MySQL工具

    3. 触发器和存储过程:SQL Server的触发器和存储过程是数据库逻辑的重要组成部分。在转换时,工具可能需要将这些逻辑转换为MySQL的存储过程或函数,以保持业务逻辑的一致性。 4. 安全性考虑:迁移过程中要确保数据...

    sqlserver sql语句.全.有注释.word文档

    13. **存储过程**:存储过程是一组预编译的SQL语句,可重复使用,提高性能并简化代码。它们还可以接受参数,返回值,甚至包含流程控制语句。 14. **触发器**:触发器是一种特殊类型的存储过程,会在特定的DML(数据...

    SqlServer连接工具

    SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...

    oracle,sqlserver及mysql对比

    Oracle、SQL Server 及 MySQL 对比 Oracle、SQL Server 及 MySQL 是目前最流行的三大关系数据库管理系统,各有其优缺点。本文将从表空间、查询语句、事务、分区表和分区索引、优缺点等方面对三者进行比较。 表空间...

    SQL SERVER2000数据库备份和恢复存储过程.rar_SQL 备份_recovery in SQL_sql server

    在提供的文件列表中,"MySQL数据库函数.txt"和"从一个MySQL的例子来学习查询语句.txt"虽然不是SQL Server 2000的内容,但可以作为对比学习,了解不同数据库系统在备份恢复机制上的异同。"数据库查询结果的动态排序....

    微型Sql Server查询分析器、数据库比较工具,SQL语句编写助手

    可对SqlServer的两个数据库表结构等进行详细的比较,十分方便,小巧 SQL语句编写助手SQLAssistant: 对主流数据库Sql Server,Oracle,DB2,MySql,Access等都可用,写脚本或存储过程时提示功能十分强大,十分方便,...

    sql跟踪语句整理工具2

    这类工具通常能够帮助用户收集、分析和整理在数据库操作过程中产生的SQL语句,以优化查询性能、找出瓶颈或者进行问题排查。 描述中的“之前上传的不能使用,现在重新上传。之前上传的大家就不要下载了,谢谢!”...

    SQL Server从表结构和数据得到更新SQL语句,可以作为导数据库的工具。

    提供的压缩包文件"SQL Server从表结构和数据得到更新SQL语句,可以导库用"很可能包含一个实用工具或脚本,能够自动化上述过程,简化数据库的导出工作。使用这样的工具可以大大提高工作效率,避免手动编写和执行大量...

    SQLSERVER中对Image(大对象)对象操作

    在SQL Server数据库管理系统中,`Image`数据类型用于存储大对象(LOB,Large Object),如图片、文档或二进制数据。本篇文章将深入探讨如何在SQL Server中对`Image`对象进行操作,包括插入、查询、更新和删除等基本...

    sqlserver批量执行脚本文件

    2. **Transact-SQL (T-SQL)**:SQL Server使用的SQL方言,它支持标准SQL之外的一些特有功能,如存储过程、触发器、函数等。批量执行的脚本通常包含多条T-SQL语句,可能涉及到数据插入、更新、删除,或者数据库结构的...

    在SQL Server中通过SQL语句实现分页查询

    ### 在SQL Server中通过SQL语句实现分页查询 #### 一、背景介绍 在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致...

    oracle与SQL server的语法差异总结

    Oracle 和 SQL Server 是两种广泛应用的关系型...这些对比可以帮助开发者理解和适应在Oracle与SQL Server之间切换时可能遇到的不同语法和使用习惯。理解这些差异对于在两个系统间进行迁移或开发跨平台应用至关重要。

    SQLSERVER表结构对比

    "SQLSERVER表结构对比"这个主题涉及到如何比较两个SQL Server数据库中的表定义,包括字段、索引、约束以及存储过程等差异。 SQL Server 2008 R2是在Windows 2008 R2 64位操作系统上运行的一个强大关系型数据库管理...

    Sql server 分页存储过程的性能对比

    本篇资料主要探讨的是在SQL Server中,利用存储过程实现分页查询时的性能对比,旨在帮助数据库管理员选择最优的解决方案。 分页通常有多种实现方式,包括ROW_NUMBER()函数、游标、变量以及一些自定义的存储过程。...

    Oracle和SQL Server的一些区别(函数和存储过程)

    通过上述对比,我们可以看到Oracle与SQL Server在数学函数、字符串处理以及存储过程等方面都有着自己独特的实现方式和特点。理解这些差异对于跨平台迁移数据库应用或进行特定优化工作具有重要意义。

Global site tag (gtag.js) - Google Analytics