执行赋值字符串

sunfor 2020-12-04 04:58:42
declare @sql_pa VARCHAR(20)
declare @date_pa1 datetime,@date_pa2 datetime
declare @i int
set @date_pa1='2020-01-10'
set @date_pa2='2020-01-15'

set @i=1
While (@i<=2)
begin
set @sql_pa='@date_pa'+ltrim(str(@i))
print(@sql_pa)
set @i=@i+1
end

执行后的输出结果为:
@date_pa1
@date_pa2


我现在想问@sql_pa这个赋值变量当前值为'@date_pa1',时,如何实现print(@date_pa1)结果?(用EXEC试了不行)
想得到如下结果:
Jan 10 2020 12:00AM
Jan 15 2020 12:00AM
...全文
225 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨夹雪 2020-12-05
  • 打赏
  • 举报
回复
换个思路,你吧N个变量的值存入表或逗号拼接成一个字符串,然后取第n条记录第n个
sunfor 2020-12-04
  • 打赏
  • 举报
回复
还有没有简单方法,我就想通过@sql_pa这个值,指向变量@date_pa1~N对应的值
锟斤拷锟斤拷 2020-12-04
  • 打赏
  • 举报
回复
锟斤拷锟斤拷 2020-12-04
  • 打赏
  • 举报
回复
declare @sql_pa VARCHAR(max) declare @date_pa11 datetime,@date_pa22 datetime set @date_pa11='2020-01-10' set @date_pa22='2020-01-15' declare @i int set @i=1 While (@i<=2) begin ----declare @xxxx datetime set @sql_pa='declare @xxxx datetime,@date_pa1 datetime,@date_pa2 datetime '+' set @date_pa1='''+ cast(@date_pa11 as varchar(50)) +''''+' set @date_pa2='''+ cast(@date_pa22 as varchar(50)) +'''' set @sql_pa=@sql_pa+' set @xxxx =(select @date_pa'+ltrim(str(@i))+') print(@xxxx)' --print(@sql_pa) exec(@sql_pa) ----print(@xxxx) set @i=@i+1 end 这个可以了
雨夹雪 2020-12-04
  • 打赏
  • 举报
回复


DECLARE @sql_pa VARCHAR(20)
DECLARE @sql NVARCHAR(100)
DECLARE @x DATETIME
DECLARE @date_pa1 DATETIME , @date_pa2 DATETIME
DECLARE @i INT
SET @date_pa1 = '2020-01-10'
SET @date_pa2 = '2020-01-15'

SET @i = 1;
WHILE ( @i <= 2 )
BEGIN
      SET @sql_pa = '@date_pa' + LTRIM(STR(@i))
      SET @sql = 'SELECT @x=' + @sql_pa
      EXEC sp_executesql @sql , N'@date_pa1 datetime,@date_pa2 datetime,@x datetime OUTPUT' , @date_pa1 , @date_pa2 , @x OUTPUT
      PRINT @x
      SET @i = @i + 1
END
      
sunfor 2020-12-04
  • 打赏
  • 举报
回复
我只想这个@sql_pa在WHILE中使用指定对应@date_pa1的值,上面的exec太长了。
锟斤拷锟斤拷 2020-12-04
  • 打赏
  • 举报
回复
但是这样只能在结果里显示,没办法在消息里面显示出来
锟斤拷锟斤拷 2020-12-04
  • 打赏
  • 举报
回复
declare @sql_pa VARCHAR(max) declare @date_pa11 datetime,@date_pa22 datetime set @date_pa11='2020-01-10' set @date_pa22='2020-01-15' declare @i int set @i=1 While (@i<=2) begin set @sql_pa='declare @date_pa1 datetime,@date_pa2 datetime '+' set @date_pa1='''+ cast(@date_pa11 as varchar(50)) +''''+' set @date_pa2='''+ cast(@date_pa22 as varchar(50)) +'''' set @sql_pa=@sql_pa+' select @date_pa'+ltrim(str(@i)) print(@sql_pa) exec(@sql_pa) set @i=@i+1 end 这样就可以exec了
sunfor 2020-12-04
  • 打赏
  • 举报
回复
想得到如下结果: Jan 10 2020 12:00AM Jan 15 2020 12:00AM 请问print(@sql_pa)这如何修改?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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