大鱼 发表于 2006-1-11 09:58

存储过程中使用变量的出错问题

存储过程中使用变量的出错问题

declare @v1 int
declare @tableName varchar(200)
set @tableName='a'
set @v1=(exec ('select top 1 max(id) from '+@tableName+' '))

在一个存储过程中,希望搜索的表名为一个变量。
并将其搜索出来的最大ID值付给一个变量。却频频出错。
高手过来指点下了。
(如果不用临时表有没什么好的实现方法呢?)

盼望 发表于 2006-1-11 10:10

原帖由 大鱼 于 2006-1-11 09:58 发表
存储过程中使用变量的出错问题

declare @v1 int
declare @tableName varchar(200)
set @tableName=\'a\'
set @v1=(exec (\'select top 1 max(id) from \'+@tableName+\' \'))

在一个存储过程中,希望搜索的表 ...

用了max 应该就只能查出一个记录吧
怎么还要用top 1?

大鱼 发表于 2006-1-11 10:20

呵呵。不用TOP 1也是错误的。
在SQL 语句中exec (\'select top 1 max(id) from \'+@tableName+\' \')并没出错。

盼望 发表于 2006-1-11 10:39

有没有提示什么错?

大鱼 发表于 2006-1-11 10:42

declare @v1 int
declare @tableName varchar(200)
set @tableName=\'a\'
set @v1=(exec (\'select max(id) from \'+@tableName+\' \'))

务器: 消息 156,级别 15,状态 1,行 4
在关键字 \'exec\' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 4
第 4 行: \')\' 附近有语法错误。

大鱼 发表于 2006-1-11 13:10

declare @v1 int
declare @tableName varchar(200)
set @tableName=\'a\'
exec (\'select =max(id) into ##ttt from \'+@tableName+\' \')
select @v1= from ##ttt
drop table ##ttt
select @v1

使用临时表实现的方法。看来是没什么好的办法了。只能用这个了。

盼望 发表于 2006-1-11 14:26

原帖由 大鱼 于 2006-1-11 09:58 发表
存储过程中使用变量的出错问题

declare @v1 int
declare @tableName varchar(200)
set @tableName=\'a\'
set @v1=(exec (\'select top 1 max(id) from \'+@tableName+\' \'))

在一个存储过程中,希望搜索的表 ...


你看看是不是这里错?
@v1应该定义成一个表
因为select语句返回是一个集合的

大鱼 发表于 2006-1-11 14:38

declare @v1 int
declare @tableName varchar(200)
set @tableName=\'a\'
set @v1=(select max(id)from a)
print @v1

大鱼 发表于 2006-1-11 14:39

这样可是行的哦。
页: [1]
查看完整版本: 存储过程中使用变量的出错问题