还是动态语句的问题

vileboy 2003-11-20 11:16:17
declare @sign varchar(20)
declare @today varchar(20)
declare @tbl varchar(50) --表名
declare @id_name varchar(50) --编号字段名字
declare @max_id varchar(50)
declare @sqls nvarchar(4000)
set @sign='GE'
set @today='2003-11-5'
select @tbl=tbl_name_vch,@id_name=field_id_vch from sy_tbl_set where sign_vch=@sign
--exec('select '+@a+' =max( '+@id_name+' ) max_id from ['+@tbl +'] where fildate_dtm='+@today)
set @sqls='select @a=max('+@id_name+') from ['+@tbl +'] where fildate_dtm='+@today
exec sp_executesql @sqls,N'@a varchar(50) output',@max_id output


select max_id --这里显示为null,本来有值的

--set @max_id=max_id
if @max_id is null
begin
set @max_id=@sign+convert(varchar(10),getdate(),112)+'0001'
end
else
begin
set @max_id=left(@max_id,len(@max_id)-4)+right(@max_id,4)+1
end
select @max_id
上面的语句不能返回最大值。请大家在看看。
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
华芸智森 2004-03-19
  • 打赏
  • 举报
回复
UP
pengdali 2003-11-20
  • 打赏
  • 举报
回复
改了这里:

set @sqls='select @a=max('+@id_name+') from ['+@tbl +'] where fildate_dtm='''+@today+''''
pengdali 2003-11-20
  • 打赏
  • 举报
回复
declare @sign varchar(20)
declare @today varchar(20)
declare @tbl varchar(50) --表名
declare @id_name varchar(50) --编号字段名字
declare @max_id varchar(50)
declare @sqls nvarchar(4000)
set @sign='GE'
set @today='2003-11-5'
select @tbl=tbl_name_vch,@id_name=field_id_vch from sy_tbl_set where sign_vch=@sign
set @sqls='select @a=max('+@id_name+') from ['+@tbl +'] where fildate_dtm='''+@today+''''
exec sp_executesql @sqls,N'@a varchar(50) output',@max_id output


select max_id --这里显示为null,本来有值的

--set @max_id=max_id
if @max_id is null
begin
set @max_id=@sign+convert(varchar(10),getdate(),112)+'0001'
end
else
begin
set @max_id=left(@max_id,len(@max_id)-4)+right(@max_id,4)+1
end
select @max_id

22,209

社区成员

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

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