关于存储过程的问题

llcyjz 2010-05-08 05:22:01
代码源文件:

ALTER proc [dbo].[UpdateAthleteResultByName]
@LiftType varchar(50),
@Result int,
@AthleteName varchar(50)
as
declare @sql varchar(500)
declare @LT varchar(50)

set @sql='Update AthleteResult set @LiftType=@Result where AthleteName=@AthleteName'
print(@sql)
exec(@sql)

------------------------------------------------------------------------------------------

执行代码:

USE [ll]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[UpdateAthleteResultByName]
@LiftType = N'Grasp1',
@Result = 10,
@AthleteName = N'张三'

SELECT 'Return Value' = @return_value

GO


-----------------------------------------------------------------------------------------------

报错信息:

Update AthleteResult set @LiftType=@Result where AthleteName=@AthleteName
消息 137,级别 15,状态 1,第 1 行
必须声明标量变量 "@LiftType"。

(1 行受影响)

------------------------------------------------------------------------------------------------------

问题在@LiftType=@Result  这个地方 好像是说等号左边不能是变量。
如果这个等号左边是表的列名,右边是更新的值。
由于这个列名是活的,所以我把它设置成为变量,所以是灵活的,但是报错了。
请问大家 这个问题有解决的方法吗?

thanks~~


...全文
85 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sql_lover 2010-05-08
  • 打赏
  • 举报
回复

ALTER proc [dbo].[UpdateAthleteResultByName]
@LiftType varchar(50),
@Result int,
@AthleteName varchar(50)
as
declare @sql varchar(500)
declare @LT varchar(50)

set @sql='Update AthleteResult set'+ @LiftType+'='+@Result+' where AthleteName='+@AthleteName
print(@sql)
exec(@sql)

sql_lover 2010-05-08
  • 打赏
  • 举报
回复

ALTER proc [dbo].[UpdateAthleteResultByName]
@LiftType varchar(50),
@Result int,
@AthleteName varchar(50)
as
declare @sql varchar(500)
declare @LT varchar(50)

set @sql='Update AthleteResult set'+ @LiftType+'='+@Result+' where AthleteName=@AthleteName'
print(@sql)
exec(@sql)
喜-喜 2010-05-08
  • 打赏
  • 举报
回复
'看错你的需求了!呵呵...'

'try'

ALTER proc [dbo].[UpdateAthleteResultByName]
@LiftType varchar(50),
@Result int,
@AthleteName varchar(50)
as
declare @sql varchar(500)
declare @LT varchar(50)

set @sql='Update AthleteResult set '+@LiftType+'='+@Result+' where AthleteName='+@AthleteName
print(@sql)
exec(@sql)
喜-喜 2010-05-08
  • 打赏
  • 举报
回复
SQL中获得EXEC后面的sql语句或返回值的方法

前言:在数据库程序开发的过程中,我勱们经常会碰到学习利用EXEC来执行一段需要返回某些值的sql语句(通常是构造动态sql语句时使用),或者在一个HTML存储过程中利用EXEC调用另一个HTML有返回值的存储过程(必须获得返回值),那么如何获得这些返回值呢?


1.EXEC执行sql语句的情况

declare @rsql varchar(250)

declare @csql varchar(300)

declare @rc nvarchar(500)

declare @cstucount int

declare @ccount int

set @rsql='(select Classroom_id from EA_RoomTime where zc='+@zc+' and xq='+@xq+' and T'+@time+'=''否'') and ClassroomType=''1'''

--exec(@rsql)

set @csql='select @a=sum(teststucount),@b=sum(classcount) from EA_ClassRoom where classroom_id in '

set @rc=@csql+@rsql

exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount output--将exec的结果放入变量中的做法

--select @csql+@rsql

--select @cstucount

上面的@rc这个HTMLsql语句的功能是找出特定时间段里所有有空的教室数量以及这些教室所能容纳的学生人数,因为涉及到学习动态的sql语句(@csql这句里条件中有一个HTML列名是动态变化的)的构造,所以要放在exec里执行,但是同时我勱又要返回2个HTML结果,所以执行时的代码为:


exec sp_executesql @rc,N'@a int output,@b int output',@cstucount output,@ccount

output--将exec的结果放入变量中的做法


这样就将返回值放到学习了,@cstucount,@ccount两个HTML变量中,得到学习了我勱们想要的结果。


2.exec执行带返回值的存储过程的情况


我勱们来看一个HTML简单的存储过程:


create procedure ProTest

(

@name varchar(10),

@money int output

)

as

begin

if(@name='1')

set @money=1000

else

set @money=2000

end

这个HTML只是一个HTML简单的示例,这个HTML存储过程返回的是@money 这个HTML参数的值,那么当我勱们在另外一个HTML存储过程中调用此存储过程的时候如何获取这个HTML参数呢,方法如下:


declare @m int ---用来接收返回值的变量

exec ProTest @name='1',@money=@m output --一定要注名是output

就这么简单,我勱们就获得了返回值。

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧