Sql server 存储过程基础语法
一、定义变量
--简单赋值
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 存储过程一般用在实现复杂的功能,数据操纵方面。
Sql server 存储过程基础语法的更多相关文章
- SQL SERVER 存储过程基础
一.注释 -- 单行注释,从这到本行结束为注释,类似C++,c#中// /* … */ 多行注释,类似C++,C#中/* … */ 二.变量 (int, smallint, tinyint, deci ...
- sql server 存储过程基础知识
转自家园大哥博文http://www.cnblogs.com/jiajiayuan/archive/2011/06/15/2081201.html 什么是存储过程呢?存储过程就是作为可执行对象存放在数 ...
- SQL Server 存储过程相关语法
一.定义变量及赋值 1.1 普通变量 --定义变量 declare @parameter_set int ) ) --set 关键字赋值 ; --select 赋值 select @parameter ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- 14、SQL Server 存储过程
SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...
- SQL Server 存储过程(转载)
SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...
- Sql Server数据库基础
--------------------------------------第一章 Sql Server数据库基础------------------------------------------ ...
- (摘录)SQL Server 存储过程
文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...
- 第一篇——第一文 SQL Server 备份基础
原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...
随机推荐
- 【技巧总结】Penetration Test Engineer[5]-Operating System Security(SQL Server、MySQL提权)
4.数据库安全基础 4.1.MSSQL 数据库角色权限 sysadmin:执行SQL Server中的任何动作 db_owner:可以执行数据库中技术所有动作的用户 public:数据库的每个合法用户 ...
- gcc编译选项【转】
转自:https://blog.csdn.net/rheostat/article/details/19811407 常用选项 -E:只进行预处理,不编译-S:只编译,不汇编-c:只编译.汇编,不链接 ...
- usbnet驱动深入分析-usb虚拟网卡host端【转】
转自:http://blog.csdn.net/zh98jm/article/details/6339320 1.驱动流程: 2.明确probe函数的功能: probe有usb core 经枚举过 ...
- python3 asyncio官方文档中文版
事件循环基类 事件循环基类 事件循环是由asyncio提供的核心执行装置.它提供了多种服务,包括: 注册.执行和关闭延时调用(超时) 为各种通信创建客户端和服务端传输 为一个外部程序通信启动子进程和相 ...
- unity 2d 游戏优化之路 遇坑记录
情景说明: unity 出的Android包,在目前一些主流机型跑都没有问题,但是在 小米3 这种比较老的机器上跑,报如下错误 GLSL compilation failed, no infolog ...
- 30 C? Go? Cgo!
C? Go? Cgo! 17 March 2011 Introduction Cgo lets Go packages call C code. Given a Go source file writ ...
- 【Android开发日记】之入门篇(七)——Android数据存储(上)
在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...
- mac设置java环境变量, 使用oh-my-zsh
参考:http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/ 如果用bash,修改~/.ba ...
- Codeforces 988F Rain and Umbrellas(DP)
题目链接:http://codeforces.com/contest/988/problem/F 题目大意: 有三个整数a,n,m,a是终点坐标,给出n个范围(l,r)表示这块区域下雨,m把伞(p,w ...
- JDBC核心API
JDBC核心API在java.sql.*和javax.sql.* 1.Driver接口:表示Java驱动程序接口,具体的数据库厂商要实现其此接口 connect(url.propertis):连接数据 ...