sql server 可不可以通过循环的方式声明变量并赋值?

qq_42240246 2018-05-18 09:56:43
declare @i0 int
declare @i1 int
set @i0=2
declare @c1 int
declare @a0 nvarchar(1000)
declare @a1 nvarchar(1000)
while (@i0<=@step)
begin
set @i1=@i0-1
set @a0='declare @c'+convert(nvarchar(30),@i0)+' int'
set @a1='select top 1 @c'+ convert(nvarchar(30),@i0) +'= rprice from research where rtime between '''+ @begintime+''' and '''+@endtime+''' and rprice not in(select top '+ convert(nvarchar(30),@i1)+' rprice from research where rtime between'''+ @begintime+''' and '''+@endtime+''')'
exec(@a0)
exec(@a1)
set @i0=@i0+1
end

我想通过循环的方式声明变量并赋值,但是运行过程中发现变量根本没有声明,请问一下是哪里出错了?
...全文
1613 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wylwyl1108 2018-06-11
  • 打赏
  • 举报
回复
你用EXEC('')试试
shinger126 2018-05-21
  • 打赏
  • 举报
回复
引用 楼主 qq_42240246 的回复:
declare @i0 int declare @i1 int set @i0=2 declare @c1 int declare @a0 nvarchar(1000) declare @a1 nvarchar(1000) while (@i0<=@step) begin set @i1=@i0-1 set @a0='declare @c'+convert(nvarchar(30),@i0)+' int' set @a1='select top 1 @c'+ convert(nvarchar(30),@i0) +'= rprice from research where rtime between '''+ @begintime+''' and '''+@endtime+''' and rprice not in(select top '+ convert(nvarchar(30),@i1)+' rprice from research where rtime between'''+ @begintime+''' and '''+@endtime+''')' exec(@a0) exec(@a1) set @i0=@i0+1 end 我想通过循环的方式声明变量并赋值,但是运行过程中发现变量根本没有声明,请问一下是哪里出错了?
楼主是想输出变量值么?
二月十六 2018-05-19
  • 打赏
  • 举报
回复
  declare @i0 int
    declare @i1 int
    set @i0=2
    declare @c1 int
    declare @a0 nvarchar(1000)
     declare @a1 nvarchar(1000)
    while (@i0<=@step)
    begin
    set @i1=@i0-1
    set @a0='declare @c'+convert(nvarchar(30),@i0)+' int '
    set @a1='select top 1 @c'+ convert(nvarchar(30),@i0) +'= rprice from research where rtime between '''+ @begintime+''' and '''+@endtime+''' and rprice not in(select top '+ convert(nvarchar(30),@i1)+' rprice from research where rtime between'''+ @begintime+''' and '''+@endtime+''')'
    exec(@a0+@a1)
    set @i0=@i0+1
    end
RINK_1 2018-05-19
  • 打赏
  • 举报
回复
这样试试呢。还有,@step、@begintime、@endtime这3个是传入的参数吗,否则怎么没看见声明他们。

declare @i0 int
    declare @i1 int
    set @i0=2
    declare @c1 int
    declare @a0 nvarchar(1000)
     declare @a1 nvarchar(1000)
    while (@i0<=@step)
    begin
    set @i1=@i0-1
    set @a0='declare @c'+convert(nvarchar(30),@i0)+' int
        select top 1 @c'+ convert(nvarchar(30),@i0) +'= rprice from research where rtime between '''+ @begintime+''' and '''+@endtime+''' and rprice not in(select top '+ convert(nvarchar(30),@i1)+' rprice from research where rtime between'''+ @begintime+''' and '''+@endtime+''')'
    exec(@a0)
    --exec(@a1)
    set @i0=@i0+1
    end

22,206

社区成员

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

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