求教!这个变量查询错在哪儿啊?

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
是这样的,想在某一表中找出序号的最大值,加一,再赋给变量
@序号,T-SQL语句如下:
declare @序号 varchar(255)
declare @表名 varchar(255)
declare @sql varchar(200)
set@表名='机械密封$'
set @sql=' select '+''''+@序号+''''+'=max(序号)+1 from '+ @表名
exec (@sql)
go
信息提示:命令运行成功,可是怎么不返回@序号的值呢?
我要用得到的值进行insert 操作,以实现自动计算添加序号的。。
呜呜。。怎么回事呢???











回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
你不妨在exec 之前,先把你 @sql 这个变量的值打出来,看看是不是你想要执行的SQL语句。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
嗯,打出来是空。。为什么呢?如果改为:
set @sql=' select '+'@序号'+'=max(序号)+1 from '+ @表名
那么打出来就是我要的语句,不过却信息提示:必须声明变量@序号。。
怎么回事?:):)
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
你直接写:
select @序号=max(序号)+1 from 机械密封$
来执行,不行吗?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
因为表名是变的,我想把它做在存储过程里。。。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
改为:
set @sql=' select @序号=max(序号)+1 from '+ @表名
不知道行不?
还有你为什么不用@@IDENTITY呢?如果序号是自增的就用这个吧!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 mo_yuan_ming 发布
[B]改为:
set @sql=' select @序号=max(序号)+1 from '+ @表名
不知道行不?
[/B]

我自己试了不行!
如果是set @sql=' declare @序号nvarchar(255) select @序号=max(序号'+1 from ' + @表名 + ' print @序号'
可以!
但序号还是拿不出来!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
恩,是啊。。。呜呜。。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
关注中:
请斑竹解答
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
动态sql要传出变量需要用sp_executesql
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行