工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1124|回复: 8

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

[复制链接]
发表于 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 [id]=max(id) into ##ttt from '+@tableName+' ')
select @v1=[id] 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 | 显示全部楼层
这样可是行的哦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-6-3 06:52

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表