`

【MSsqlserver】存储过程学习开始

阅读更多
大概在三年之前,自己有弄过存储过程,是在oracle的数据库上弄的。
现在项目在ms sql server上了。又有存储过程。
所以需要对这方面进行一个全方面的了解和学习。
1,最基础的存储过程。
从代码解析开始吧。

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ( 'HumanResources.uspGetAllEmployees', 'P' ) IS NOT NULL 
    DROP PROCEDURE HumanResources.uspGetAllEmployees;
GO
CREATE PROCEDURE HumanResources.uspGetAllEmployees
AS
    SET NOCOUNT ON;
    SELECT LastName, FirstName, Department
    FROM HumanResources.vEmployeeDepartmentHistory;
GO


这个procedure是没有任何意义的。只是做为一个演示。
首先第一句为使用数据库。如果你一个数据库引擎上有多个数据库,那么这个必要的。
go语句之后是一个查询uspGetAllEmployees是否存在。
使用OBJECT_ID ( 'HumanResources.uspGetAllEmployees', 'P' )进行查询。而后面第二个参数为“P”,所表示的意思是查询procedure。

与oracle的不同。 oracle采用是CREATE OR REPLACE。
第二个才是procedure的开始。
他里面其实就是一个很简单的查询语句。

这个procedure既没有输入,也没有输出。 

所以没有什么很大的含义。这个值作为一个入门来使用。


ms server 执行动态sql
传参为@tablename,我需要建立一个以传参名的table。
定义
declare @sql varchar(200)='create table '+@tablename+'(id int)'

然后使用
exec @sql

始终执行不成
原因是不能这样定义。
需要分开定义
如:
declare @sql varchar(200)
set @sql='create table'+@tablename+(id int)
exec @sql


这样才能执行成功。



sysobjects中type字段类型解释:

C   =   CHECK   约束 
D   =   默认值或   DEFAULT   约束 
F   =   FOREIGN   KEY   约束 
L   =   日志 
FN   =   标量函数 
IF   =   内嵌表函数 
P   =   存储过程 
PK   =   PRIMARY   KEY   约束(类型是   K) 
RF   =   复制筛选存储过程 
S   =   系统表 
TF   =   表函数 
TR   =   触发器 
U   =   用户表 
UQ   =   UNIQUE   约束(类型是   K) 
V   =   视图 
X   =   扩展存储过程 




数据库存储过程是不支持数组类型的,
如果说对方需要更新一个数组内的所有数据该怎么办呢“?
那么我们采用string到数组的方式,不过这里必须定义一个分割的符号,如“,”。
以下就是一个类似的存储过程
alter PROCEDURE testArray 
    @ID nvarchar(500) 
as 
    DECLARE @PointerPrev int 
    DECLARE @PointerCurr int 
    DECLARE @TId int 
    Set @PointerPrev=1 
     
    while (@PointerPrev < LEN(@ID)) 
    Begin 
        Set @PointerCurr=CharIndex(',',@ID,@PointerPrev) 
        if(@PointerCurr>0) 
        Begin 
            set @TId=cast(SUBSTRING(@ID,@PointerPrev,@PointerCurr-@PointerPrev) as int) 
            select @TId
            SET @PointerPrev = @PointerCurr+1 
        End 
        else 
            Break 
    End 
    --删除最后一个,因为最后一个后面没有逗号,所以在循环中跳出,需另外再删除 
     set @TId=cast(SUBSTRING(@ID,@PointerPrev,LEN(@ID)-@PointerPrev+1) as int) 

     select @TId
GO



存储过程是在网络上找的。  可以使用
执行方法:
exec testArray @ID='1,2,3,4,5,6,7,8,9'



-----------------------------------------------------------------
对于存储过程报错的问题。
如果你没有进行检测而去直接执行sql,那么会出现异常。
如果你可以获取这个异常信息,
当然我还是建议大家把异常进行捕获。

delcare @msg varchar(200)
delcare @MyError int=@@Error
 select top 1 @msg = description from sys.sysmessages
        where error = @MyError  and msglangid = 2052 --中文描述
分享到:
评论

相关推荐

    Pemrograman SQL 01_sql_MSSQLServer_programming_

    MSSQLServer还提供了存储过程,这是一种预编译的SQL语句集合,可以封装复杂逻辑并多次调用。通过使用存储过程,可以提高代码复用性,减少网络通信,并提升系统性能。另外,触发器则是一种特殊的存储过程,会在特定的...

    MsSqlServer示例数据库备份,AdventureWorks2014.rar

    在"MsSqlServer示例数据库备份,AdventureWorks2014.bak"中,我们找到了AdventureWorks2014数据库的一个完整备份,这意味着包含了所有表、视图、存储过程、触发器、索引和其他数据库对象的完整信息。这种备份类型通常...

    Pemrograman SQL 05_sql_MSSQLServer_programming_

    3. **存储过程**:学习如何定义和执行存储过程,这是一种预编译的SQL代码集合,可以提高性能并简化重复任务。 4. **触发器**:理解触发器的工作原理,它们是自动响应数据库中特定事件(如INSERT,UPDATE或DELETE)...

    Pemrograman SQL 03_sql_MSSQLServer_programming_

    在MSSQLServer环境中,我们还将接触到触发器,这是一种特殊类型的存储过程,会在特定的DML(Data Manipulation Language)操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器有助于保持数据的一致性和完整性。...

    Pemrograman SQL 04_sql_MSSQLServer_programming_

    这样的课程可能包括对SQL语法的深入学习,数据查询,表的创建,更新和删除,以及可能涉及的更高级主题,如存储过程,触发器,视图和事务处理。 在SQL编程中,基础概念包括: 1. **SQL语法**:SQL(Structured ...

    Sql智能提示-MsSqlServer插件

    5. **对象浏览**:插件还提供了一个数据库对象浏览器,允许用户直观地查看和导航数据库中的表、视图、存储过程和其他对象,方便在编写SQL时快速定位所需资源。 6. **性能分析**:在编写复杂查询时,插件有时会提供...

    Pemrograman SQL 02_sql_MSSQLServer_programming_

    6. **存储过程**:存储过程是预编译的SQL语句集合,允许在数据库端封装复杂的业务逻辑。它们可以提高性能,减少网络流量,并提供更好的安全性和可重用性。 7. **事务管理**:SQL中的事务确保数据的一致性和完整性。...

    C#+MsSqlServer餐饮管理系统

    C#结合MsSqlServer数据库构建的餐饮管理系统,为新手提供了一个功能全面、代码简洁的学习平台,同时也为实际的餐饮企业管理提供了高效解决方案。本文将深入探讨这一系统的实现原理和关键功能。 首先,C#是一种面向...

    【MSSQLServer】 T-SQL 整理

    - **存储过程**:一组预编译的T-SQL语句,可视为数据库中的可执行程序,能接受参数,返回结果集,提高性能和安全性。 5. **视图** - **视图**:虚拟表,基于一个或多个表的SELECT语句,提供不同视角的数据访问,...

    sql实训数据库 mssqlserver

    - `sp_dropuser` 和 `sp_droplogin`:这两个存储过程分别用于删除数据库中的用户和登录。注释表示这些操作在创建用户后并未执行。 - `sp_adduser`:此过程将登录账户添加到特定数据库中,并指定角色。例如,'...

    MSSQLserver菜鸟进阶教程.rar

    3. 存储过程:预编译的SQL语句集合,提高执行效率。 九、高级特性 1. 触发器:自动执行的程序,响应数据更改事件。 2. 视图:虚拟表,提供不同的数据视图。 3. 分区表:将大表分割成多个物理部分,提升查询性能。 4...

    MS SQL Server简明教程

    2. **存储过程**:存储过程是一组预编译的T-SQL语句,可以提高代码复用性和安全性。 3. **视图**:视图是虚拟表,提供了一种简化数据访问和保护数据的方法。 4. **XML支持**:SQL Server 2005增强了对XML的支持,...

    SQL Server 2005存储引擎1-5

    以上知识点只是SQL Server 2005存储引擎的冰山一角,实际学习过程中,还会涉及到更多的高级特性,如分区视图、XML支持、空间数据处理、全文搜索、性能计数器和性能监视工具等。通过深入理解这些概念,开发者能够更好...

    基于云存储的校园网络硬盘模拟

    【基于云存储的校园网络硬盘模拟】项目是一个针对高校环境设计的在线存储系统,它旨在模仿云...对于学习和理解云存储系统的设计与实现,以及掌握ASP.NET和MSSQLServer的结合应用,这个毕业设计是一个很好的实践案例。

    超详细图解MS sql server 2005安装全过程.rar

    理解T-SQL语言、索引、存储过程、视图等核心概念对于数据库管理至关重要。 总结,安装Microsoft SQL Server 2005是一个涉及多个步骤的过程,每个环节都需要仔细考虑和配置。通过了解系统需求、安装流程、配置选项...

    不妨看看我用dwr和json完成简单分页-jsp dwr分页(mssqlserver2005)

    标题中的“dwr和json完成简单分页-jsp dwr分页(mssqlserver2005)”涉及到的技术栈主要包括Direct Web Remoting (DWR)、JavaScript Object Notation (JSON)、JavaServer Pages (JSP)以及Microsoft SQL Server 2005...

    SQL Server示例数据库

    6. **存储过程**:编写和调用存储过程,了解它们如何封装复杂的业务逻辑,并提高查询性能。 7. **索引**:理解索引的工作原理,创建和管理索引,以及如何优化查询性能。 8. **事务和并发控制**:学习事务的ACID...

    SQL Server学习总结.docx

    - **脚本窗口**:用于编写存储过程、函数等数据库对象的脚本。 #### 二、设置主键 - **设置主键的目的**:确保表中的每一行记录具有唯一性,避免重复记录的出现。 - **2.1 设置主键的标识增量** - **概念**:...

    ConnectionDemo源码C#

    - **数据库**:指用于存储和管理数据的系统,本示例专注于SQL数据库,可能使用了关系型数据库管理系统(RDBMS),如Microsoft SQL Server(MSSQLServer)。 - **C#**:是一种面向对象的编程语言,常用于开发Windows...

    SQL Northwind英文示例数据库安装

    在对象资源管理器中,你应该能看到Northwind数据库以及其包含的表、视图、存储过程等对象。 6. **学习与实践**:Northwind数据库中的表包括Customers、Employees、Orders、Products等,每个表都有特定的业务含义。...

Global site tag (gtag.js) - Google Analytics