一、定义变量
--简单赋值declare @a
intset @a=5print
@a--使用select语句赋值declare @user1
nvarchar(50)select @user1='张三'print
@user1declare @user2
nvarchar(50)select @user2
= Name from ST_User
where ID=1print
@user2--使用update语句赋值declare @user3
nvarchar(50)update ST_User
set @user3
= Name where ID=1print
@user3 |
二、表、临时表、表变量
--创建临时表1create table #DU_User1( [ID]
[int]
NOT NULL, [Oid]
[int]
NOT NULL, [Login]
[nvarchar](50) NOT NULL, [Rtx]
[nvarchar](4) NOT NULL, [Name]
[nvarchar](5) NOT NULL, [Password]
[nvarchar](max)
NULL, [State]
[nvarchar](8) NOT NULL);--向临时表1插入一条记录insert into #DU_User1
(ID,Oid,[Login],Rtx,Name,[Password],State)
values (100,2,'LS','0000','临时','321','特殊');--从ST_User查询数据,填充至新生成的临时表select *
into #DU_User2
from ST_User
where ID<8--查询并联合两临时表select *
from #DU_User2
where ID<3
union select *
from #DU_User1--删除两临时表drop table #DU_User1drop table #DU_User2 |
--创建临时表CREATE TABLE #t( [ID]
[int]
NOT NULL, [Oid]
[int]
NOT NULL, [Login]
[nvarchar](50) NOT NULL, [Rtx]
[nvarchar](4) NOT NULL, [Name]
[nvarchar](5) NOT NULL, [Password]
[nvarchar](max)
NULL, [State]
[nvarchar](8) 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(1,1)--添加一列,默认填充全球唯一标识alter table #t
add [myid1]
uniqueidentifier NOT NULL default(newid())select *
from #tdrop table #t |
--给查询结果集增加自增长列--无主键时:select IDENTITY(int,1,1)as ID,
Name,[Login],[Password]
into #t
from ST_Userselect *
from #t--有主键时:select (select SUM(1)
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(50) null)insert into @t
values(1,'1')insert into @t
values(2,'2')select *
from @t |
三、循环
--while循环计算1到100的和declare @a
intdeclare @sum intset @a=1set @sum=0while
@a<=100begin set @sum+=@a set @a+=1endprint
@sum |
四、条件语句
--if,else条件分支if(1+1=2)begin print
'对'endelsebegin print
'错'end--when
then条件分支declare @today
intdeclare @week
nvarchar(3)set @today=3set @week=case when @today=1
then '星期一' when @today=2
then '星期二' when @today=3
then '星期三' when @today=4
then '星期四' when @today=5
then '星期五' when @today=6
then '星期六' when @today=7
then '星期日' else '值错误'endprint
@week |
五、游标
declare @ID
intdeclare @Oid
intdeclare @Login
varchar(50)--定义一个游标declare user_cur
cursor for select ID,Oid,[Login]
from ST_User--打开游标open user_curwhile
@@fetch_status=0begin--读取游标 fetch next from user_cur
into @ID,@Oid,@Login print
@ID --print
@Loginendclose user_cur--摧毁游标deallocate user_cur |
六、触发器
触发器中的临时表:
Inserted
存放进行insert和update 操作后的数据
Deleted
存放进行delete 和update操作前的数据
--创建触发器Create trigger User_OnUpdate
On ST_User
for UpdateAs declare @msg
nvarchar(50) --@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 outputASBEGIN set @sum=@a+@bEND--创建Return返回值存储过程CREATE PROCEDURE PR_Sum2 @a
int, @b
intASBEGIN Return @a+@bEND --执行存储过程获取output型返回值declare @mysum
intexecute PR_Sum
1,2,@mysum outputprint
@mysum--执行存储过程获取Return型返回值declare @mysum2
intexecute @mysum2=
PR_Sum2 1,2print
@mysum2 |
八、自定义函数
函数的分类:
1)标量值函数
2)表值函数
a:内联表值函数
b:多语句表值函数
3)系统函数
--新建标量值函数create function FUNC_Sum1( @a
int, @b
int)returns intasbegin return @a+@bend--新建内联表值函数create function FUNC_UserTab_1( @myId
int)returns tableasreturn (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](50) NOT NULL, [Rtx]
[nvarchar](4) NOT NULL, [Name]
[nvarchar](5) NOT NULL, [Password]
[nvarchar](max)
NULL, [State]
[nvarchar](8) NOT NULL)asbegin insert into @t
select *
from ST_User
where ID<@myId returnend--调用表值函数select *
from dbo.FUNC_UserTab_1(15)--调用标量值函数declare @s
intset @s=dbo.FUNC_Sum1(100,50)print
@s--删除标量值函数drop function FUNC_Sum1 |
谈谈自定义函数与存储过程的区别:
一、自定义函数:
1. 可以返回表变量
2. 限制颇多,包括
不能使用output参数;
不能用临时表;
函数内部的操作不能影响到外部环境;
不能通过select返回结果集;
不能update,delete,数据库表;
3. 必须return 一个标量值或表变量
自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
二、存储过程
1. 不能返回表变量
2. 限制少,可以执行对数据库表的操作,可以返回数据集
3. 可以return一个标量值,也可以省略return
存储过程一般用在实现复杂的功能,数据操纵方面。
本文详细介绍了SQL编程的基础知识,包括变量定义、表与临时表的使用、循环与条件语句、游标操作、触发器及存储过程的应用,并探讨了自定义函数与存储过程的区别。

5854

被折叠的 条评论
为什么被折叠?



