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

sqlserver存储过程变量

发布时间: 2023-04-28 19:36:59

sqlserver存储过程加变量的问题

加上引号

create proc insertTableNO(
@name varchar(50),
@manHour decimal,
@workTime datetime,
@wages decimal,
@insertTime datetime,
@tableName varchar(50)
)
as
begin
if object_id(@tableName) is not null
exec('insert into '+ @tablename+ ' ( name,manHour,workTime,wages,insertTime)
values('''散灶枝+@name+''','''+@manHour+''','辩神''+@workTime+''','''+@wages+'''冲敏,'''+@insertTime+''')')
else
return -1
end

㈡ sqlserver 存储过程将查询结果给变量

declare @name varchar(50)
select @name=name from Student where sid=@sid

--请注意升配,确保查吵模指询出的数据是单行码穗

㈢ SQLSERVER 存储过程中 赋值时出错 提示:必须声明标量变量

存储过程代码也不贴出来,怎么帮你分析呢?一般出现这种问题的原因是变量没有事先定义就直接赋值,或者语法不对,用set还是select是有讲塌培拿究的,建团搭议把代码贴出来看中孝看

㈣ 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 存储过程中的变量赋值

你差扮枯有存储过虚洞程定义如下
create procere some_procere @var1 int,@var2 int
传值时
exec some_procere 100,100或者缺灶
exec some_procere @var1=100,@var2=100

㈥ sql怎样新建存储过程

一:创建没有参数的存储过程:

CREATE PROCEDURE select_all

AS

BEGIN

SELECT * from T_login1

GO

二:创建带参数的存储过程:

CREATE PROCEDURE select_name

@id uniqueidentifier

AS

BEGIN

SELECT * from T_login1 where PSN0001A=@id

GO

(6)sqlserver存储过程变量扩展阅读

创建存储过程的注意事项:

1、保持事务简短,事务越短,越不可能造成阻塞。

2、在事务中尽量避免使用循环while和游标,以及避免采用访问大量行的语句。

3、在启动事务前完成所有的计算和查询等操作,避免同一事务中交错读取和更新。可以使用表变量预先存储数据。即存储过程中查询与更新使用两个事务实现。

4、超时会让事务不执行回滚,超时后如果客户端关闭连接sqlserver自动回滚事务。如果不关闭,将造成数据丢失,而其他事务将在这个未关闭的连接上执行,造成资源锁定,甚至服务器停止响应。

㈦ 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 存储过程中变量赋值

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

㈨ 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中存储过程变量使用

可以的,不过你刚才的数据敏核念类型表达错误:

修正的脚本如桥困下:

declare@aanumeric(10,2)
set@aa=111
declare@bbnumeric(10,2)
set氏基@bb=(@aa/2)
print@bb
热点内容
脚本的生命周期顺序 发布:2025-02-12 03:37:28 浏览:368
素数加密 发布:2025-02-12 03:37:27 浏览:802
ar源码 发布:2025-02-12 03:32:04 浏览:655
阅图文件夹 发布:2025-02-12 03:30:22 浏览:761
旧手机存储资料 发布:2025-02-12 03:29:42 浏览:471
linux使用git 发布:2025-02-12 03:28:56 浏览:404
编程培训有那些 发布:2025-02-12 03:28:52 浏览:523
如何导入安卓通讯录到苹果 发布:2025-02-12 03:10:31 浏览:23
pdf压缩绿色软件 发布:2025-02-12 03:01:11 浏览:76
编程就业前景怎么样 发布:2025-02-12 02:55:13 浏览:47