当前位置:首页 » 存储配置 » sqlserver存储过程表变量

sqlserver存储过程表变量

发布时间: 2022-06-06 02:24:34

sqlSERVER存储过程中修改表 要怎么做

create procere 把考号分配给2个班的学号最小的前5位同学
as
BEGIN

;WITH cte AS
(
SELECT rn=ROW_NUMBER()OVER(ORDER BY GETDATE()) ,* FROM EXAM
),
stuu1 AS
(
SELECT rn=ROW_NUMBER()OVER(ORDER BY stuid) ,* FROM stu WHERE clazz='1班';
),
stuu2 AS
(
SELECT rn=ROW_NUMBER()OVER(ORDER BY stuid)+5 ,* FROM stu WHERE clazz='2班';
),
stuu AS
(
SELECT * FROM stuu1
UNION ALL
SELECT * FROM stuu2
)

UPDATE c
SET c.stuID = s.stuID
FROM cte c JOIN stuu s ON c.rn=s.rn

end

Ⅱ sqlserver怎么创建存储过程

1、可视化创建

a.登录SQL Server

b.打开数据库==》要创建存储过程的数据库==》可编程性==》存储过程

c.选中“存储过程”右击 ,在系出现的对话框中选择“新建存储过程”

d.在右侧出现的对话框中填写具体存储过程内容完成后执行即可

2、代码创建

a.全手写代码

一、定义变量
--简单赋值
declare@aint
set@a=5
print@a

--使用select语句赋值
declare@user1nvarchar(50)
select@user1='张三'
print@user1
declare@user2nvarchar(50)
select@user2=NamefromST_UserwhereID=1
print@user2

--使用update语句赋值
declare@user3nvarchar(50)
updateST_Userset@user3=NamewhereID=1
print@user3


二、表、临时表、表变量

--创建临时表1
createtable#DU_User1
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL
);
--向临时表1插入一条记录
insertinto#DU_User1(ID,Oid,[Login],Rtx,Name,[Password],State)values(100,2,'LS','0000','临时','321','特殊');

--从ST_User查询数据,填充至新生成的临时表
select*into#DU_User2fromST_UserwhereID<8

--查询并联合两临时表
select*from#DU_User2whereID<3unionselect*from#DU_User1

--删除两临时表
droptable#DU_User1
droptable#DU_User2

--创建临时表
CREATETABLE#t
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL,
)

--将查询结果集(多条数据)插入临时表
insertinto#tselect*fromST_User
--不能这样插入
--select*into#tfromdbo.ST_User

--添加一列,为int型自增长子段
altertable#tadd[myid]intNOTNULLIDENTITY(1,1)
--添加一列,默认填充全球唯一标识
altertable#tadd[myid1](newid())

select*from#t
droptable#t
--给查询结果集增加自增长列

--无主键时:
selectIDENTITY(int,1,1)asID,Name,[Login],[Password]into#tfromST_User
select*from#t

--有主键时:
select(selectSUM(1)fromST_UserwhereID<=a.ID)asmyID,*fromST_UseraorderbymyID
--定义表变量
declare@ttable
(
idintnotnull,
msgnvarchar(50)null
)
insertinto@tvalues(1,'1')
insertinto@tvalues(2,'2')
select*from@t
三、循环

--while循环计算1到100的和
declare@aint
declare@sumint
set@a=1
set@sum=0
while@a<=100
begin
set@sum+=@a
set@a+=1
end
print@sum
四、条件语句

--if,else条件分支
if(1+1=2)
begin
print'对'
end
else
begin
print'错'
end

--whenthen条件分支
declare@todayint
declare@weeknvarchar(3)
set@today=3
set@week=case
when@today=1then'星期一'
when@today=2then'星期二'
when@today=3then'星期三'
when@today=4then'星期四'
when@today=5then'星期五'
when@today=6then'星期六'
when@today=7then'星期日'
else'值错误'
end
print@week


五、游标

declare@IDint
declare@Oidint
declare@Loginvarchar(50)

--定义一个游标
declareuser_curcursorforselectID,Oid,[Login]fromST_User
--打开游标
openuser_cur
while@@fetch_status=0
begin
--读取游标
fetchnextfromuser_curinto@ID,@Oid,@Login
print@ID
--print@Login
end
closeuser_cur
--摧毁游标
deallocateuser_cur
六、触发器

触发器中的临时表:

Inserted
存放进行insert和update操作后的数据
Deleted
存放进行delete和update操作前的数据

--创建触发器
CreatetriggerUser_OnUpdate
OnST_User
forUpdate
As
declare@msgnvarchar(50)
--@msg记录修改情况
select@msg=N'姓名从“'+Deleted.Name+N'”修改为“'+Inserted.Name+'”'fromInserted,Deleted
--插入日志表
insertinto[LOG](MSG)values(@msg)

--删除触发器
droptriggerUser_OnUpdate
七、存储过程

--创建带output参数的存储过程
CREATEPROCEDUREPR_Sum
@aint,
@bint,
@sumintoutput
AS
BEGIN
set@sum=@a+@b
END

--创建Return返回值存储过程
CREATEPROCEDUREPR_Sum2
@aint,
@bint
AS
BEGIN
Return@a+@b
END

--执行存储过程获取output型返回值
declare@mysumint
executePR_Sum1,2,@mysumoutput
print@mysum

--执行存储过程获取Return型返回值
declare@mysum2int
execute@mysum2=PR_Sum21,2
print@mysum2八、自定义函数

函数的分类:

1)标量值函数

2)表值函数

a:内联表值函数

b:多语句表值函数

3)系统函数--新建标量值函数
createfunctionFUNC_Sum1
(
@aint,
@bint
)
returnsint
as
begin
return@a+@b
end

--新建内联表值函数
createfunctionFUNC_UserTab_1
(
@myIdint
)
returnstable
as
return(select*fromST_UserwhereID<@myId)

--新建多语句表值函数
createfunctionFUNC_UserTab_2
(
@myIdint
)
returns@ttable
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL
)
as
begin
insertinto@tselect*fromST_UserwhereID<@myId
return
end

--调用表值函数
select*fromdbo.FUNC_UserTab_1(15)
--调用标量值函数
declare@sint
set@s=dbo.FUNC_Sum1(100,50)
print@s

--删除标量值函数
dropfunctionFUNC_Sum1
谈谈自定义函数与存储过程的区别:

一、自定义函数:

1.可以返回表变量

2.限制颇多,包括

不能使用output参数;

不能用临时表;

函数内部的操作不能影响到外部环境;

不能通过select返回结果集;

不能update,delete,数据库表;

3.必须return一个标量值或表变量

自定义函数一般用在复用度高,功能简单单一,争对性强的地方。

二、存储过程

1.不能返回表变量

2.限制少,可以执行对数据库表的操作,可以返回数据集

3.可以return一个标量值,也可以省略return

存储过程一般用在实现复杂的功能,数据操纵方面。

Ⅲ sqlserver 存储过程中变量赋值

你没有把问题写多明白啊不过看你得描述,应该是在 as后面声明的局部变量。按你得用法绝对是没有问题的,我试过没问题啊。你说的“if @cc = 0这个判断失效”是什么意思呢?是表里面有记录自然@cc!=0,,“在判断前面加select @cc的时候就可以”又是什么意思?执行存储过程的话,if只是判定条件只有select才会打印出数据~~~~~~~

Ⅳ sqlserver存储过程中 如何把表变量转换成数值

直接将表名也改为varchar(50) 就行了
要不你就用预执行

if exists(select * from sysobjects where name='proc_select')
drop proc proc_select
go
create proc proc_select
@table varchar(50)
as
declare @sql varchar(8000)
set @sql='select * from '+@table
exec(@sql)
go

exec proc_select 'Types'

Ⅳ sqlserver存储过程: Exec(@变量)在一个存储过程中调用如何有参数返回变量查询值

create proc proc_find_count13
@column_name varchar(20)
,@term varchar(20)
as
declare @sel varchar(500)
SET @sel='declare @count int ;set @count=(select count(*) from proct where ' + @column_name + ' like ''%'+@term+'%''); print @count;'
EXECute (@sel)
go
exec proc_find_count13 'p_name','c'

Ⅵ SqlServer存储过程

create
procere
prCreateSubPlan
as
begin
declare
@id
int,
@intCycle
int,
@planName
varchar(100),
@createTime
smalldatetime,
@cycleTime
int
select
@id
=
min(t_cplan_id)
from
t_cplan
while
(@id
is
not
null)
begin
select
@planName=t_plan_name,
@createTime
=
createTime,
@cycleTime
=
cycleTime
from
t_cplan
where
t_cplan_id=@id
select
@intCycle=
0
while
(@intCycle<@cycleTime)
begin
--
表t_plan
列t_plan_id是IDENTITY

insert
t_plan
(t_plan_name,
t_cplan_id,
createTime)
values
(@planName,
@id,
dateadd(day,
@intCycle,
@createTime))
select
@intCycle
=
@intCycle
+
1
end
select
@id
=
min(t_cplan_id)
from
t_cplan
where
t_cplan_id>@id
end
end
go

Ⅶ 有关于sqlserver的存储过程的问题:@xxx 和 declare @xxx有什么不同

@xxx 和 declare @xxx有什么不同?
前者是在已经定义的情况下使用,后者是定义。
【有疑问可以HI我,或追问,但请不要关闭问题,谢谢!】
PS:
SQL Server中定义变量的方法:
全局变量 DECLARE @@变量名 类型
局部变量 DECLARE @变量名 类型

赋值方式:

--一. SET赋值
DECLARE @Name varchar(50),@@Name varchar(50)
SET @Name='局部张三'
SET @@Name='全局张三'
SELECT @@Name+' '+@Name
--二. SELECT 赋值
DECLARE @Name varchar(50),@@Name varchar(50)
SELECT @Name='局部张三',@@Name='全局张三'
SELECT @@Name+' '+@Name

--顺便说下

--1.变量的作用域是有限的
--2.进行变量操作,需初始化
DECLARE @Name varchar(50)
--SET @Name=''
SET @Name = @Name+'张三'
SELECT @Name --结果将为NULL
--3.变量也是存在表变量,表变量与物理表存在一定区别

热点内容
保存在服务器的图片如何删除 发布:2024-11-15 09:55:09 浏览:801
花雨庭国际服服务器ip 发布:2024-11-15 09:54:00 浏览:502
服务器的空岛如何刷钱 发布:2024-11-15 09:40:52 浏览:262
安卓系统录像设置在哪里 发布:2024-11-15 09:36:33 浏览:917
电信级服务器电脑 发布:2024-11-15 09:26:27 浏览:246
压缩某个文件夹 发布:2024-11-15 09:03:11 浏览:891
网址能解压吗 发布:2024-11-15 08:54:09 浏览:933
python更改目录 发布:2024-11-15 08:41:08 浏览:265
服务器闪存可以装在一般电脑上吗 发布:2024-11-15 08:36:46 浏览:8
安卓手机怎么查询自己的路线轨迹 发布:2024-11-15 08:32:19 浏览:969