SQL存储过程中怎样给变量赋值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL存储过程中怎样给变量赋值?相关的知识,希望对你有一定的参考价值。

create proc fuction_View
@count int
as
declare @strsql nvarchar(1000)
declare @s_id int
@strsql ='select top 1 s_id from (select top ' + @count + ' s_id from PageIndex order by s_id ) aa order by s_id desc'
exec(@strsql)
-----这里我想把exec(@strsql)得出来的值赋值给变量@s_id,应该怎么写呢?谢谢!
go
因为我听说游标会影响执行效率,所认没用,如果用游标能说具体点吗?我对这个用的少,大家多一些人想想解决方案啊,在这里形成一个总结,我想这个问题是很容易遇到的常见问题吧?我刚才不用游标已经做出来了,我的方法将会告诉给最佳答案者!

呵呵,set @id=exec(@strsql)是会报语法错误的,至于回答3楼说的:exec 和 exec()是有区别的,exec加上括号,括号里面写变量名,变量名可以写SQL语句,exec(赋于了SQL语句的变量) 就是执行这句SQL了。

参考技术A create proc fuction_View
@count int
as
declare @strsql nvarchar(1000)
declare @s_id int
@strsql ='select top 1 @id=s_id from (select top ' + @count + ' s_id from PageIndex order by s_id ) aa order by s_id desc'
execute sp_executesql @strsql,N'@id int out',@id=@s_id out
go本回答被提问者采纳
参考技术B 用游标吧,cursor,先declare,然后循环的fetch into 到s_id 参考技术C exec 是执行存储过程的命令,不能作为存储过程名
而且你这个似乎是希望用变量转换成SQL命令,不是这样用法的
参考技术D 不是直接set @id=exec(@strsql)么

SQL存储过程定义的变量赋值问题

我在存储过程里定义了变量
wcfy NUMBER;
然后有写了一个赋值语句
wcfy:=select sum(ZSF+QTFY+CCF+CCBZFY+WCRLF) from LQSHDWCSQD where WCDH=dh_in;
为什么老是提示我下面这种东西?是什么意思?

错误:PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:

( - + case mod new not null <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
execute forall merge time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<an alternatively-quoted string literal with character set specification>
<an alternatively-quo
行:2935
文本:wcfy:=select sum(ZSF+QTFY+CCF+CCBZFY+WCRLF) from LQSHDWCSQD where WCDH=dh_in;
sum(ZSF+QTFY+CCF+CCBZFY+WCRLF)这里面的字段都是NUMBER类型的

刚才试了isnull这种方法不行哦~而且NUMBER也是数值型的,不可能存在NULL的。也试过用CAST来强制转换了,也不行。

如果都是NUMBER类型的话也可以不用SUM,但是现在出错的问题不是这个问题~

你都把字段值加起来了,那还要SUM()函数干嘛呢?直接写成wcfy:=select ZSF+QTFY+CCF+CCBZFY+WCRLF from LQSHDWCSQD where WCDH=dh_in;
就可以了(如果字段ZSF,QTFY,CCF,CCBZFY,WCRLF是在一条记录里的话 )。
参考技术A SQL中好像没有number型的吧,接近一点的话有个,numeric浮点型,鄙人愚昧!! 参考技术B wcfy:=select sum(isnull(ZSF,0)+isnull(QTFY+isnull(CCF,0)+isnull(CCBZFY,0)+isnull(WCRLF,0)) from LQSHDWCSQD where WCDH=dh_in;

换成这样试试本回答被提问者和网友采纳

以上是关于SQL存储过程中怎样给变量赋值?的主要内容,如果未能解决你的问题,请参考以下文章

Sql server 存储过程中怎么将变量赋值?

oracle 中怎样把查询结果当做已知量或赋值给某个变量?

SQL存储过程定义的变量赋值问题

Sql server 存储过程中怎么将变量赋值?

在SQL存储过程中,如何声明变量,赋值变量。最好有具体语句配上实例。3Q啦。谢谢各位大侠的帮忙

存储过程给变量赋值