SQLSERVER存储过程基础

1.声明变量

DECLARE     @F001  SMALLINT,  (三元素,声明declare+变量名+类型)

@F002  INTEGER,

@F003  VARCHAR(20),

@F004  CHAR(20),

@@F002  MONEY

2.赋值语句

SET  @F001 =space(40)   @F002= 3

3.条件判断(IF...ELSE)

IF  condition  BEGIN

[statements  ]

END

ELSE  BEGIN   (ELSE IF condition2 BEGIN)

[elseifstatements ]

END

4.多分支判断(case[when...then...else...] end)

SET @F011 =

CASE

WHEN [testexpression1] THEN  @F001

WHEN [testexpression2] THEN  @F002

WHEN [testexpression3] THEN  @F003

WHEN [testexpression4] THEN  @F004

END

5.循环(while)

WHILE condition  BEGIN

[statements ]

END

6.动态定义游标(*)

DECLARE @strSQL  nvarchar(30)

DECLARE @inSQL  nvarchar(50)   -- select...

SET @strSQL = ' DECLARE  name_cursor CURSOR FOR
 ' + @inSQL

EXEC (@strSQL)

7.遍历游标

FETCH NEXT  FROM name_cursor into@F001,@F002  (要求与游标的返回值对应)

WHILE @@FETCH_STATUS = 0 BEGIN  (如@inSQL是selectf001,f002 from tablename)

FETCH NEXT  FROM  name_cursor into @F001,@F002

END (说明:FETCH_STATUS检索到数据返回0,失败返回-1,可判断是否滚动未到结尾。)

8.获得游标行数

SET @RECCNT = @@ROWCOUNT   --内嵌参数@@FETCH_STATUS

9.事务处理

BEGIN  distributed  transaction

WHILE  @@TRANCOUNT > 0

commit transaction

10.字符串连接

SET @m_sql = @m_sql + ' Where F001 = ''' +@F001 + ''''

SET @m_sql = @m_sql + ' F002 = ' + CONVERT(varchar,@F002) convert会加引号?

11.存储过程的调用及返回值

(1)存储过程的创建 (sql server数据库中create procedure)

CREATE  PROCEDURE  material_solo_days_proc

(@materialnovarchar(20),

@year_month datetime,

@totalday int,

@qty decimal(18,4)=0 output 
--总量,也会return

)

AS

BEGIN

DECLARE@@count
int

SET@@count = 0

DECLARE@@dailyqty
decimal(18,4)

SET@@dailyqty
= 0

SET@qty = 0

WHILE@@count < @totalday

BEGIN

--计算日流水量

EXECUTE @@dailyqty
= material_solo_oneday_proc @materialno,@year_month

SET @qty
= @qty + @@dailyqty

SET @year_month
= dateadd(dd,1,@year_month)

SET @@count
= @@count + 1

END

RETURN@qty

END

(2)SQL-DELPHI调用存储过程(open/execproc)

withmaterial_account_proc do

begin

Close;

ProcedureName:='material_account_proc';

Parameters.Clear;

Parameters.Refresh;

Parameters.ParamByName('@year_month').Value:= year_month;

Parameters.ParamByName('@condition').Value:= ''; //string不匹配nvarchar

open;

y :=Parameters.ParamByName('@count').Value;

x := Parameters.ParamByName('@totalday').Value;

end;

(3)存储过程调用存储过程

DECLARE @C001       VARCHAR(20),

@C002       SMALLINT

EXEC  name_produce  @C001,@C002 output

/////////////////////////////////////////////////////////////////////////////////

12.动态sql语句的创建和执行()

CREATE      PROCEDURE              usp_GetSalesHistory

  (

         @WhereClauseNVARCHAR(2000)=NULL

  )

  AS

  BEGIN

  DECLARE     @SelectStatement  NVARCHAR(2000)

  DECLARE     @FullStatement     NVARCHAR(4000)

  SET        @SelectStatement = 'SELECT      *     FROM   SalesHistory'

  SET        @FullStatement = @SelectStatement +ISNULL(@WhereClause,' ')

  PRINT    @FullStatement

  EXECUTE    sp_executesql         @FullStatement

  /*EXECUTE(@FullStatement) */

END

说明: sp_executesql 
执行的不能是varchar只能是nvarchar,sp_executesql
支持独立于 Transact-SQL
字符串设置参数值,有更多例子网上搜。

Execute可以是varchar,而且execute的sql语句中的参数只能是属性列或者表

13.Update语句常见错误总结 (update .,.set where)

--√

Update name_table set

F001 = @F181,

F002 = @F182

Where

F003 = @F003

--×

Update name_table

F001 = @F181,

F002 = @F182

Where

F003 = @F003

--×

Update name_table set

F001 = @F181,

F002 = @F182,

Where

F003 = @F003

--×

Update name_table set

,F001 = @F181

,F002 = @F182

Where

F003 = @F003

14.Insert语句常见语法错误总结

--√

INSERT INTO name_table(

,KEY_FIELD,BUSYOCD

)Values(

@F001,@F002

)

--×

INSERT INTO name_table(

F001,F002

)Values(

,@F001,@F002

)

--×

INSERT INTO name_table(

F001,F002

)Values(

@F001,@F002,

)

--×

INSERT name_table(

F001,F002

)Values(

@F001,@F002

)

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] ( ...

随机推荐

  1. dubbo学习实践(2)之Dubbo入门Demo

    开篇之前,先来了解下dubbo服务治理与技术架构,直接看图 dubbo技术架构图: 1. 新建dubbo项目,目录结构如下 代码说明: 1.代码分为Provider(服务提供方)与consumer(服 ...

  2. 嵌入式linux启动过程详解

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  3. Python--数据存储

    新建测试文档测试.txt内容如下: 张三:今天天气真好. 李四:是的,真的太好了. 张三:阳光明媚. 李四:鸟语花香. 王五:装逼现场:请带好安全帽 张三:难得好天气,今天就不偷懒了. 李四:能把乞讨 ...

  4. Shell-03-表达式和运算符

    表达式和运算符 条件表达式语句 [ 1 -eq 1 ] [[ 1 -eq 1 ]] test 1 -eq 1 等同于 [ 1 -eq 1 ] [root@satest_192-168-3-121 sh ...

  5. Vue系列-01-基础语法

    vue.js文件 # https://blog-static.cnblogs.com/files/lichengguo/vue.js # 下载该文件,保存的路径为代码同级目录 js/vue.js 文件 ...

  6. 内网隧道与SOCKS代理思路总结

    早就想总结一下这部分内容了,总是有其他事情卡住,一直拖到现在 内网中有很多边界设备,比如防火墙.这种边界设备会控制内部主机的对外连接,一般会仅允许某些种类的端口开放或某种数据流量出入 这就意味着我们只 ...

  7. 数据结构与算法-排序(十)桶排序(Bucket Sort)

    摘要 桶排序和基数排序类似,相当于基数排序的另外一种逻辑.它是将取值范围当做创建桶的数量,桶的长度就是序列的大小.通过处理比较元素的数值,把元素放在桶的特定位置,然后遍历桶,就可以得到有序的序列. 逻 ...

  8. Docker运行PostgreSQL

    docker-compose.yml version: '3.1' services: db: image: postgres restart: always ports: - 5432:5432 e ...

  9. 干货!4大实验项目,深度解析Tag在可观测性领域的最佳实践!

    Opentelemetry协议,是CNCF(Cloud Native Computing Foundation-云原生计算基金会)定义的最新一代的可观测规范(目前还在孵化中),该规范定义了可观测性的三 ...

  10. 【mysql】explain性能分析

    1. explain的概念 使用EXPLAIN 关键字可以模拟优化器执行SQL 查询语句,从而知道MySQL 是如何处理你的SQL 语句的.分析你的查询语句或是表结构的性能瓶颈. 用法: Explai ...