我刚刚学习存储过程,遇到问题,请大家帮帮忙,谢谢了。
请问如何在存储过程中提取select查询结果到局部变量中,可以进行下一步更新操作。
因为我指定了top 1 仅仅返回一条记录,如果存在应该如何取出结果中的score这一列啊
set @score=score
这里提示列名'score'无效
还有就是在更新完毕以后,想要依然可以返回这个select的所有列的内容给客户端程序。
如果在存储过程中多次select,如何在外部访问这些查询出来的结果呢create procedure Calc
@studentID varchar(50)
as
declare @sql varchar(1024), @score integer
begin
set @sql='select top 1 * from studentInfo where id='+@studentID
exec sp_executesql @sql
if @@ROWCOUNT<>0
begin
set @score=score
if @score>90
begin
set @sql='update summary set score=score'+cast(@score as varchar)
exec sp_executesql @sql
end
end
end谢谢了
请问如何在存储过程中提取select查询结果到局部变量中,可以进行下一步更新操作。
因为我指定了top 1 仅仅返回一条记录,如果存在应该如何取出结果中的score这一列啊
set @score=score
这里提示列名'score'无效
还有就是在更新完毕以后,想要依然可以返回这个select的所有列的内容给客户端程序。
如果在存储过程中多次select,如何在外部访问这些查询出来的结果呢create procedure Calc
@studentID varchar(50)
as
declare @sql varchar(1024), @score integer
begin
set @sql='select top 1 * from studentInfo where id='+@studentID
exec sp_executesql @sql
if @@ROWCOUNT<>0
begin
set @score=score
if @score>90
begin
set @sql='update summary set score=score'+cast(@score as varchar)
exec sp_executesql @sql
end
end
end谢谢了
begin
set @score=score
if @score>90
begin
set @sql='update summary set score=score'+cast(@score as varchar)
exec sp_executesql @sql
end
end
红字部分要从某个表里面取或者显式指定值。不然SQLServer不知道你这个值是哪里来的
exec sp_executesql @sql
可以加上红字部分,来把结果集放到#t中,在存储过程的整个生命周期内都能用到
@studentID varchar(50),
@score output
as
declare @sql varchar(1024)
begin
set @sql='select top 1 * from studentInfo where id='+@studentID
exec sp_executesql @sql
if @@ROWCOUNT<>0
begin
set @score=score
if @score>90
begin
set @sql='update summary set score=score'+cast(@score as varchar)
exec sp_executesql @sql
end
end
end试试看,使用 storeproce的output参数可以传到客户端开发工具接受值的
@studentID varchar(50)
as
declare @sql varchar(1024), @score integer
begin
set @sql='select top 1 * into #t from studentInfo where id='+@studentID
exec sp_executesql @sql
if @@ROWCOUNT<>0
begin
SELECT @score=(SELECT score FROM #t)
if @score>90
begin
set @sql='update summary set score=score'+cast(@score as varchar)
exec sp_executesql @sql
end
END
SELECT * FROM summary
end
执行之后就会得到结果集
--你的写法类似这样,但不知道你想做什么,呵呵
create procedure Calc
@studentID varchar(50)
as
declare @sql varchar(1024), @score integer
begin
select top 1 @score=score from studentInfo where id=@studentID
if @score>90
update summary set score=@score;
select * from summary;
end
go
因为存储过程,包括了查询和更新操作,应该使用_RecordsetPtr::Open呢,还是_CommandPt::Eecute呢我只需要得到这个临时表中的select出来的数据,先谢谢了
sql.Format("execute Calc '%d'", sid);