一、定义变量
--简单赋值
declare @a int
set @a=
print @a --使用select语句赋值
declare @user1 nvarchar()
select @user1='张三'
print @user1
declare @user2 nvarchar()
select @user2 = Name from ST_User where ID=
print @user2 --使用update语句赋值
declare @user3 nvarchar()
update ST_User set @user3 = Name where ID=
print @user3
二、表、临时表、表变量
--创建临时表1
create table #DU_User1
(
[ID] [int] NOT NULL,
[Oid] [int] NOT NULL,
[Login] [nvarchar]() NOT NULL,
[Rtx] [nvarchar]() NOT NULL,
[Name] [nvarchar]() NOT NULL,
[Password] [nvarchar](max) NULL,
[State] [nvarchar]() NOT NULL
);
--向临时表1插入一条记录
insert into #DU_User1 (ID,Oid,[Login],Rtx,Name,[Password],State) values (,,'LS','','临时','','特殊'); --从ST_User查询数据,填充至新生成的临时表
select * into #DU_User2 from ST_User where ID< --查询并联合两临时表
select * from #DU_User2 where ID< union select * from #DU_User1 --删除两临时表
drop table #DU_User1
drop table #DU_User2 --创建临时表
CREATE TABLE #t
(
[ID] [int] NOT NULL,
[Oid] [int] NOT NULL,
[Login] [nvarchar]() NOT NULL,
[Rtx] [nvarchar]() NOT NULL,
[Name] [nvarchar]() NOT NULL,
[Password] [nvarchar](max) NULL,
[State] [nvarchar]() NOT NULL,
) --将查询结果集(多条数据)插入临时表
insert into #t select * from ST_User
--不能这样插入
--select * into #t from dbo.ST_User --添加一列,为int型自增长子段
alter table #t add [myid] int NOT NULL IDENTITY(,)
--添加一列,默认填充全球唯一标识
alter table #t add [myid1] uniqueidentifier NOT NULL default(newid()) select * from #t
drop table #t
--给查询结果集增加自增长列 --无主键时:
select IDENTITY(int,,)as ID, Name,[Login],[Password] into #t from ST_User
select * from #t --有主键时:
select (select SUM() from ST_User where ID<= a.ID) as myID,* from ST_User a order by myID
--定义表变量
declare @t table
(
id int not null,
msg nvarchar() null
)
insert into @t values(,'')
insert into @t values(,'')
select * from @t
三、循环
--while循环计算1到100的和
declare @a int
declare @sum int
set @a=
set @sum=
while @a<=
begin
set @sum+=@a
set @a+=
end
print @sum
四、条件语句
--if,else条件分支
if(+=)
begin
print '对'
end
else
begin
print '错'
end --when then条件分支
declare @today int
declare @week nvarchar()
set @today=
set @week=case
when @today= then '星期一'
when @today= then '星期二'
when @today= then '星期三'
when @today= then '星期四'
when @today= then '星期五'
when @today= then '星期六'
when @today= then '星期日'
else '值错误'
end
print @week
五、游标 declare @ID int
declare @Oid int
declare @Login varchar() --定义一个游标
declare user_cur cursor for select ID,Oid,[Login] from ST_User
--打开游标
open user_cur
while @@fetch_status=
begin
--读取游标
fetch next from user_cur into @ID,@Oid,@Login
print @ID
--print @Login
end
close user_cur
--摧毁游标
deallocate user_cur
六、触发器   触发器中的临时表:   Inserted
  存放进行insert和update 操作后的数据
  Deleted
  存放进行delete 和update操作前的数据 --创建触发器
Create trigger User_OnUpdate
On ST_User
for Update
As
declare @msg nvarchar()
--@msg记录修改情况
select @msg = N'姓名从“' + Deleted.Name + N'”修改为“' + Inserted.Name + '”' from Inserted,Deleted
--插入日志表
insert into [LOG](MSG)values(@msg) --删除触发器
drop trigger User_OnUpdate
七、存储过程
--创建带output参数的存储过程
CREATE PROCEDURE PR_Sum
@a int,
@b int,
@sum int output
AS
BEGIN
set @sum=@a+@b
END --创建Return返回值存储过程
CREATE PROCEDURE PR_Sum2
@a int,
@b int
AS
BEGIN
Return @a+@b
END --执行存储过程获取output型返回值
declare @mysum int
execute PR_Sum ,,@mysum output
print @mysum --执行存储过程获取Return型返回值
declare @mysum2 int
execute @mysum2= PR_Sum2 ,
print @mysum2 八、自定义函数
  函数的分类:     )标量值函数     )表值函数         a:内联表值函数         b:多语句表值函数     )系统函数    --新建标量值函数
create function FUNC_Sum1
(
@a int,
@b int
)
returns int
as
begin
return @a+@b
end --新建内联表值函数
create function FUNC_UserTab_1
(
@myId int
)
returns table
as
return (select * from ST_User where ID<@myId) --新建多语句表值函数
create function FUNC_UserTab_2
(
@myId int
)
returns @t table
(
[ID] [int] NOT NULL,
[Oid] [int] NOT NULL,
[Login] [nvarchar]() NOT NULL,
[Rtx] [nvarchar]() NOT NULL,
[Name] [nvarchar]() NOT NULL,
[Password] [nvarchar](max) NULL,
[State] [nvarchar]() NOT NULL
)
as
begin
insert into @t select * from ST_User where ID<@myId
return
end --调用表值函数
select * from dbo.FUNC_UserTab_1()
--调用标量值函数
declare @s int
set @s=dbo.FUNC_Sum1(,)
print @s --删除标量值函数
drop function FUNC_Sum1
谈谈自定义函数与存储过程的区别: 一、自定义函数:
  . 可以返回表变量   . 限制颇多,包括     不能使用output参数;     不能用临时表;     函数内部的操作不能影响到外部环境;     不能通过select返回结果集;     不能update,delete,数据库表;   . 必须return 一个标量值或表变量   自定义函数一般用在复用度高,功能简单单一,争对性强的地方。 二、存储过程
  . 不能返回表变量   . 限制少,可以执行对数据库表的操作,可以返回数据集   . 可以return一个标量值,也可以省略return    存储过程一般用在实现复杂的功能,数据操纵方面。

原文出自http://www.cnblogs.com/chaoa/articles/3894311.html

sql存储过程基本语法的更多相关文章

  1. SQL存储过程基础语法及实例

    1.定义变量简单赋值 declare @a int //声明一个变量a 赋初值为5 print @a //输出变量a 2.创建临时表 if OBJECT_ID('tempdb.#FlightState ...

  2. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  3. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  4. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  5. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  6. Oracle存储过程基本语法 存储过程

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  7. Oracle存储过程基本语法

    一.形式 1 CREATE OR REPLACE PROCEDURE 存储过程名  //是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 2 IS   ...

  8. SQL存储过程和函数

    SQL存储过程: 由来:在具体应用中,一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句.因此,mysql提供了数据库对象存储过程和函数. 定 ...

  9. (转)Oracle存储过程基本语法

    本文转载自:http://www.cnblogs.com/hero4china/articles/base_rule_oracle_procedure.html 存储过程 1  CREATE OR R ...

随机推荐

  1. Hadoop学习笔记之六:HDFS功能逻辑(2)

    Lease(租约) HDFS(及大多数分布式文件系统)不支持文件并发写,Lease是HDFS用于保证唯一写的手段. Lease可以看做是一把带时间限制的写锁,仅持有写锁的客户端可以写文件. 租约的有效 ...

  2. C++形参中const char * 与 char * 的区别

    在函数调用时,我们经常看见一个函数的接受参数为(const char *); 例如strlen()函数,它的定义为: size_t strlen( const char *str); 那么将形参设置为 ...

  3. 在使用springMVC时,页面报的404异常

    HTTP Status – Not Found Type Status Report Message /WEB-INF/test/hello.jsp Description The origin se ...

  4. P2617 Dynamic Rankings(树状数组套主席树)

    P2617 Dynamic Rankings 单点修改,区间查询第k大 当然是无脑树套树了~ 树状数组套主席树就好辣 #include<iostream> #include<cstd ...

  5. Codeforces 675E Trains and Statistic - 线段树 - 动态规划

    题目传送门 快速的vjudge通道 快速的Codeforces通道 题目大意 有$n$个火车站,第$i$个火车站出售第$i + 1$到第$a_{i}$个火车站的车票,特殊地,第$n$个火车站不出售车票 ...

  6. Django缓存系统

    在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面. 这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了. 缓存就是为了 ...

  7. qt无法定位程序输入点 于动态链接库 qt5core.dll

    造成步骤:一开始是将现成的dll[Qt5.9.3]放在文件夹里,然后使用Qt5.7.1编译的exe放进去,产生标题错误 原因:dll库不匹配 解决:使用Qt5.7.1自带的cmd命令行,使用winde ...

  8. javaweb三大框架和MVC设计模式

    javaweb三大框架和MVC设计模式 转载,原文请见https://blog.csdn.net/sunpeng19960715/article/details/50890705 一.MVC设计模式 ...

  9. Python3 tkinter基础 Listbox for+insert 将list中元素导入listbox中

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. Flask学习【第8篇】:flask-session组件

    简介 flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如 redis:保存数据 ...