不用exec怎么写?

wangxiao2008 2010-11-06 02:35:08
执行一个存储过程有个参数id,存储过程中查询表的内容,有许多表,表名如:t_aa1,t_aa2,t_aa3....
出来用下面exec的方式执行之外,能直接检索吗?

declare ID int
set ID =1000
exec ('select * from t_aa'+@ID+' where 1=1')
...全文
79 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
abuying 2010-11-06
  • 打赏
  • 举报
回复
可以明示告诉你不行的。
不用exec,也要用到sp_executesql存储过程!
不然解析不了
jikeyuan1 2010-11-06
  • 打赏
  • 举报
回复
不知所云啊
obuntu 2010-11-06
  • 打赏
  • 举报
回复
你的这种需求没办法的。

exec挺强大的,干吗不用。。
「已注销」 2010-11-06
  • 打赏
  • 举报
回复
直接写是不行的 ,找不到那个表的。
wangxiao2008 2010-11-06
  • 打赏
  • 举报
回复
我是想问不用exec执行,可不可以直接写select,用exec执行字符串的方式我能写出来
「已注销」 2010-11-06
  • 打赏
  • 举报
回复
参考,你的变量定义有问题:
declare @ID int
set @ID =1000


CREATE TABLE tmp_aa1
(
id INT IDENTITY,
NAME VARCHAR(10)
)

DECLARE @ID VARCHAR(10)
SET @ID ='1'

EXEC ('SELECT * FROM TMP_AA'+@ID+' WHERE 1=1')
wangxiao2008 2010-11-06
  • 打赏
  • 举报
回复
怎么写呢
?
select * from t_aa+Cast(@ID as nvarchar(20)) + where 1=1

这样是错误的
wangxiao2008 2010-11-06
  • 打赏
  • 举报
回复
不是看表是否存在,比如有几个表t_aa1,t_aa2,t_aa3...
后面数字,程序会传个参数id给一个存储过程,在存储过程中根据传入的id执行查询
id是几就查询对应的那个表
「已注销」 2010-11-06
  • 打赏
  • 举报
回复
你要看这个表是否存在么?
IF EXISTS(SELECT * FROM sysobjects s WHERE s.[type]='u' AND s.name='TEST')
PRINT N'存在'
ELSE
PRINT N'不存在'
obuntu 2010-11-06
  • 打赏
  • 举报
回复
?
语句本来就错了吧。

当然可以直接检索了,但看你实际需要了。

34,588

社区成员

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

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