在SQL Server中,我们通常会使用NEWID(),GETDATE(),等一些数据库函数,这些函数是很有帮助的,然后数据库也能够让我们自己写函数,即Function,下面简单说说Function的写法。

标量函数:结果为一个单一的值,可包含逻辑处理过程。其中不能用getdate()之类的不确定性系统函数.

CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName>
(
  -- 添加你的参数,及其数据类型
  @Parameter1 DataType,

  @Parameter2 DataType

)

-- 声明你返回值类型
RETURNS DataType
AS
BEGIN
  -- 声明你的返回参数

  DECLARE @ReturnValue DataType

  --可以调用你设定的参数进行逻辑运算

  SET @ReturnValue = @Parameter1 + @Parameter2

  -- Return 返回你想要返回的数
  RETURN @ReturnValue

END
GO

-----------------------------------------------------

在这种标量函数中,无法使用INSERT语句,我甚至想用SELECT 来设定参数值都不行,具体原因没有查,但是报错信息是

:Select statements included within a function cannot return data to a client.

这个以后有时间去研究研究原理。

由于项目需要我通过数据库来执行INSERT 语句,Function没法满足我,转战存储过程。

由于接触不多,我并不是太了解存储过程和Function的区别于意义是什么,我只感觉到,存储过程也能设定参数,除了return只能返回INT类型比较操蛋,好像是比Function强。之后得好好研究........

CREATE PROCEDURE ProcedureName
  -- 添加输入参数(无需逗号分离),在数据类型后加上OUTPUT属性后,可以输出这个参数
  @Parameter1 DataType OUTPUT

  @Parameter2 DataType
AS
BEGIN
  -- SET NOCOUNT OFF/ON  ON表示执行的SQL不返回具体的影响行数,OFF则返回影响行数
  SET NOCOUNT OFF;

  --声明内部常量(需要逗号分离)

  Declare @Parameter3 DataType,

  Declare @Parameter4 DataType

  --给内部常量赋值(可以用select 语句 查询想要的值)

  SET @Parameter3 = select Value from Table

  --开始执行你想要执行的DML语句

  insert/update/delete

  --记得给你想要OUTPUT的参数赋值(可以使用SQL Server 自带的函数去计算一些东西)

  SET @Parameter2 = select.......
END
GO

--------------------------------------------------------

该存储过程设定了我想要的参数,那么我执行该存储过程,要添加参数值,就可以这样做

Declare @Value

exec ProcedureName @Parameter1, @Value OUTPUT

Print @Value

当执行完以上语句时,你就看到你想要的OUTPUT值。

其中目的已经达到,但是有些原理还没有彻底了解,这些需要我花时间查找更多资料,此例仅供大致写出功能模块,要想彻底掌握,还需要了解更多的SQL知识。

带参数的存储过程和标量Function的更多相关文章

  1. c#调用Mysql带参数的存储过程

    1.首先创建一个带参数的存储过程 ①存储过程名称=proc_bookinfo  ②存储过程2个参数 一个in 一个out in参数名称=ispay out参数名称=unPaycount ③ 这个存储过 ...

  2. Sql Server 带参数的存储过程执行方法

    Sql Server 带参数的存储过程执行方法 Visual C# 动态操作 SQL Server 数据库实例教程(4):带参数的存储过程执行方法 上一篇文章介绍了带参数的SQL语句执行方法和不带参数 ...

  3. [转]SSIS OLE DB Source中执行带参数的存储过程

    本文转自:http://www.cnblogs.com/michaelxu/archive/2009/10/21/1587450.html 问题描述:执行一个存储过程得到一个多条记录的结果集,然后循环 ...

  4. oracle存储过程(带参数的存储过程)

    带参数的存储过程 举例:为指定的员工涨100元的工资,打印涨前和涨后的工资 如果带参,需要指定是输入参数还是输出参数 create or replace procedure raisesalary(e ...

  5. oracle无参数和带参数的存储过程实例

    SQL中调用存储过程语句:call procedure_name(); 注:调用时”()”是不可少的,无论是有参数还是无参数. 定义对数据库存储过程的调用时1.无参数存储过程:{call proced ...

  6. 在C#中怎么调用带参数的存储过程啊??

    1)执行一个没有参数的存储过程的代码如下:SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = ne ...

  7. 20150825 C# 调用带参数的存储过程 模板

    ////// exec proceudre2                        //System.Data.SqlClient.SqlConnection sqlcon = new Sys ...

  8. ado.net 调用带参数的存储过程

    String connString = "Data Source = localhost; Initial Catalog = hkjc;User ID = sa;Pwd = 123&quo ...

  9. 在Java中调用带参数的存储过程

    JDBC调用存储过程: CallableStatement 在Java里面调用存储过程,写法那是相当的固定: Class.forName(.... Connection conn = DriverMa ...

随机推荐

  1. Fiddler [Fiddler] Connection to localhost. failed.

    原文地址:http://blog.chinaunix.net/uid-20675015-id-1899931.html 在用Fiddler调试本机的网站时,即访问http://localhost,返回 ...

  2. 【LeetCode题意分析&解答】38. Count and Say

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  3. lombk在IDEA中报ClassNotFoundException错误

    今天接手了一个项目,用到了lombk,第一次用到,做为纯JAVA来说,确实不错. 不过在使用中碰到了一个问题,就是在IDEA中,可以在结构中看到getter和setter等都已经正确的生成了,但是运行 ...

  4. Android 优化性能之 如何避免--过度绘制

    可能有些人不明白什么是过度绘制,简单言,我们app一个页面所显示的效果是由像素一帧一帧绘制而成.过度绘制就是意味着这一帧被绘制多次.如果是静态的布局,可能影响不是很大,如果是动态的,比如ListVie ...

  5. Android 怎样在linux kernel 中读写文件

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  6. pv ticketlock解决虚拟环境下的spinlock问题

    最近看邮件,有注意到pv ticketlock相关的消息,貌似jeremy 几年前的东东,终于将要被收录到linux 3.12里面. 先说下pv ticketlock这东西,http://blog.x ...

  7. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  8. ##DAY6 UIScrollView

    ##DAY6 UIScrollView #pragma mark ———————UIScrollView——————————— 属性: contentSize 内容滚动范围 contentOffset ...

  9. 浅谈Servlet(二)

    1.forward(请求的转发)和redirect(重定向) 目的:都是为了把一个Servlet的功能,拆分到多个Servlet中,便于后续代码的维护. a.forward(请求转发) (1).如何在 ...

  10. Trie implementation

    在学习 Aho - Corasick Automation Algorithm 之前,先学习一下,Trie 的实现过程: The name trie comes from its use for re ...