一.不含参数的存储过程
1.没有返回值:
创建语句: CREATE PROCEDURE dbo.ProTest
AS 
    DECLARE @test int
    SET @test = 1 Go 执行SQL语句: EXEC dbo.ProTest 消息:命令已成功完成。结果:无 2.有返回值(使用select):
创建语句:
CREATE PROCEDURE dbo.ProTest
AS
    DECLARE @test INT;
    SET @test = 123;
    SELECT  @test; GO 执行SQL语句: EXEC dbo.ProTest 消息:(1 行受影响)。结果:123(表结构形式) 3.有返回值(使用return)
创建语句: CREATE PROCEDURE dbo.ProTest AS
    DECLARE @test INT;
    SET @test = 123;
    RETURN @test;
GO 执行SQL语句: DECLARE @test INT;
EXEC @test = dbo.ProTest; SELECT  @test 消息:(1 行受影响)。结果:123(表结构形式) 4.查询一个或多个集合(类似执行select)
创建语句: CREATE PROCEDURE dbo.ProTest AS
    SELECT  *
    FROM    dbo.Material_SO_PipeOrder;
GO 执行SQL语句: EXEC dbo.ProTest 消息:查询出来的条数 结果:查询结果 二.含参数的存储过程
1.没有返回值
创建语句: CREATE PROCEDURE dbo.ProTest     @OrderNO NVARCHAR(50) ,
    @OrderName NVARCHAR(50) ,
    @RMDSC NVARCHAR(500) = NULL  --表示可为空参数
AS
    IF ( @OrderNO IS NOT NULL )
        BEGIN
            INSERT  INTO dbo.Material_SO_PipeOrder
                    ( ID, OrderNO, OrderName, RMDSC )
            VALUES  ( NEWID(), -- ID - uniqueidentifier
                      @OrderNO, -- OrderNO - nvarchar(50)
                      @OrderName, -- OrderName - nvarchar(50)
                      @RMDSC  -- RMDSC - nvarchar(500)
                      );
        END;
GO 执行SQL语句: EXEC dbo.ProTest @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注' (或不写列名"EXEC  dbo.ProTest  N'单号001', N'名称001', N'备注';",但不能混合使用,下同)  消息:(1 行受影响)。结果:无 2.有返回值(使用select)
创建语句: CREATE PROCEDURE dbo.ProTest     @OrderNO NVARCHAR(50) ,
    @OrderName NVARCHAR(50) ,
    @RMDSC NVARCHAR(500)
AS
    IF ( @OrderNO IS NOT NULL )
        BEGIN
            INSERT  INTO dbo.Material_SO_PipeOrder
                    ( ID, OrderNO, OrderName, RMDSC )
            VALUES  ( NEWID(), @OrderNO, -- OrderNO - nvarchar(50)
                      @OrderName, -- OrderName - nvarchar(50)
                      @RMDSC  -- RMDSC - nvarchar(500)
                      );
            SELECT 1;
        END;
    ELSE
        SELECT -1;
GO 执行SQL语句: EXEC  dbo.ProTest @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注'; 消息: (1 行受影响) (1 行受影响) 结果:1(表结构形式) 3.有返回值(使用return)
创建语句: CREATE PROCEDURE dbo.ProTest     @OrderNO NVARCHAR(50) ,
    @OrderName NVARCHAR(50) ,
    @RMDSC NVARCHAR(500)
AS
    IF ( @OrderNO IS NOT NULL )
        BEGIN
            INSERT  INTO dbo.Material_SO_PipeOrder
                    ( ID, OrderNO, OrderName, RMDSC )
            VALUES  ( NEWID(), @OrderNO, -- OrderNO - nvarchar(50)
                      @OrderName, -- OrderName - nvarchar(50)
                      @RMDSC  -- RMDSC - nvarchar(500)
                      );
            RETURN 1;
        END;
    ELSE
        RETURN -1;
GO 执行SQL语句: DECLARE @test INT;
EXEC @test = dbo.ProTest @OrderNO = N'单号001', @OrderName = N'名称001', @RMDSC = N'备注'; SELECT @test 消息: (1 行受影响) (1 行受影响) 结果:1(表结构形式) 4.带输出参数的存储过程(以没有返回值的为例)
创建语句: CREATE PROCEDURE dbo.ProTest     @OrderNO NVARCHAR(50) ,
    @OrderName NVARCHAR(50) ,
    @RMDSC NVARCHAR(500) ,
    @ID UNIQUEIDENTIFIER OUTPUT --输出参数要用output标识
AS
    IF ( @OrderNO IS NOT NULL )
        BEGIN
            DECLARE @newID UNIQUEIDENTIFIER;
            SET @newID = NEWID();
            INSERT  INTO dbo.Material_SO_PipeOrder
                    ( ID ,
                      OrderNO ,
                      OrderName ,
                      RMDSC
                    )
            VALUES  ( @newID ,
                      @OrderNO , -- OrderNO - nvarchar(50)
                      @OrderName , -- OrderName - nvarchar(50)
                      @RMDSC  -- RMDSC - nvarchar(500)
                    );
            SET @ID = @newID;--可以不赋值
        END;
    ELSE
        SET @ID = NULL;--可以不赋值
GO 执行SQL语句: DECLARE @IDTest UNIQUEIDENTIFIER;
EXEC dbo.ProTest @OrderNO = N'单号001', -- nvarchar(50)
    @OrderName = N'名称001', -- nvarchar(50)
    @RMDSC = N'备注', -- nvarchar(500)
    @ID = @IDTest OUTPUT; --如果不加OUTPUT,select结果为NULL
SELECT  @IDTest; 消息: (1 行受影响) (1 行受影响) 结果:EDD11EF3-CD03-4C95-8B79-B3123B34C292(表结构形式) 三.总结与注意:
1.关于存储过程的返回值: (1).如果有return,则返回return的结果; (2).如果没有return,则返回INT值0(即使存储过程中有select集合,或Insert受影响行等); (3).如果带输出参数,则存储过程的返回值同(1),(2);OUTPUT的参数需要select出来;

  

例子

CREATE PROCEDURE getCatoryChildLst

    @name NVARCHAR(50)
   
   
AS
    IF ( @name IS NOT NULL )
        BEGIN
            SELECT str(tt.ttid)+',' FROM (SELECT id as ttid FROM fhcb_08_tbl_category where charindex('~' + @name+ '~' , '~' + FULL_ID+ '~')>0) as tt FOR XML PATH('')
           
        END;
    ELSE
        SELECT -1;

  

sqlserver存储过程(转)的更多相关文章

  1. 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)

    解剖SQLSERVER 第十五篇  SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...

  2. Sqlserver 存储过程中结合事务的代码

    Sqlserver 存储过程中结合事务的代码  --方式一 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ ...

  3. SqlServer存储过程学习笔记(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  4. SQLServer 存储过程嵌套事务处理

    原文:SQLServer 存储过程嵌套事务处理 某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形. 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否 ...

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

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

  6. SQLSERVER存储过程语法详解

    CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...

  7. SqlServer存储过程详解

    SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) dro ...

  8. sqlServer存储过程与sql语句的区别

    sqlServer   存储过程与sql语句的区别 sql存储过程与sql语句的区别: 从以下几个方面考虑: 1.编写: 存储过程:编写比较难: sql语句:相对简单: 2.性能: 存储过程:高,可移 ...

  9. SqlServer存储过程(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  10. SQLSERVER存储过程的基本语法实例

    SQLSERVER存储过程的基本语法实例 SQLSERVER存储过程的基本语法实例 一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋 ...

随机推荐

  1. JSP基础--三大指令

    JSP指令 1       JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的. JSP中 ...

  2. 0x3f3f3f3f 0xbfbfbfbf 等的原理及应用

    原理 0x的意思其实是十六进制,后面加的数其实就是一个十六进制数. 在十六进制中,我们知道a代表10,b代表11,c代表12,d代表13,e代表14,f代表15. 所以3f3f3f3f这个数用十进制数 ...

  3. 数据导出 写入到excle文件

    import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.poi ...

  4. CodeChef Mahesh and his lost array

    Mahesh and his lost array   Problem code: ANUMLA   Submit All Submissions   All submissions for this ...

  5. 【TWRP】使用adb sideload线刷ROM的方法

    本教程详细介绍 手机刷三方ROM 之前需要安装的 TWRP 这个神器工具 楼主的手机是小米,所以此教程以小米手机为例.其他手机原理类似 第一步,解锁引导程序 访问小米的官方解锁网站并申请解锁权限. 等 ...

  6. Java 8实战之读书笔记三:函数式数据处理

    二.函数式数据处理 第4章 引入流 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现). 示例: import static java.uti ...

  7. 【问题解决方案】Markdown正文中慎用星号否则容易变斜体

    参考链接: [学习总结]Markdown 使用的正确姿势:第九部分-斜体and加粗 原理: 注意: Markdown中,若在正文中使用星号,如乘号或者指针的星号时,需要特别注意 当一句话中包含两个或者 ...

  8. ES6——解构赋值

    解构赋值: 注意: 1.左右两边结构必须一样 练习1,2,3 2.右边必须是个东西(有值)练习4 3.声明和赋值不能分开(必须在一句话里完成)练习5 /* 练习1: // let arr = [1,2 ...

  9. jsp页面必填项如何加红星号*

    1.加*号 并且设置*号大小 <span style="color:red; font-size: 20px">*</span>

  10. Kvm--03 kvm克隆,桥接网络,热添加

    目录 1.Kvm克隆 1). 完整克隆 2). 链接克隆 2.kvm虚拟机的桥接网络 3.在线热添加网卡,cpu 1). 热添加网卡 2). 热添加内存 3). 热添加cpu参数 1.Kvm克隆 1) ...