如何把exec得到的结果存入临时表

andyyan110 2008-08-31 01:47:13
ALTER PROCEDURE dbo.查询存储过程
@ym int,
@tablename varchar(20)
AS
exec('select EmpID,SubID,Amount,' + @ym + ' from ' + @tablename)


以上是我写的存储过程已经测试成功,现在我要做的是把得到的结果存入或者插入一个临时表,请问如何实现

exec('select EmpID,SubID,Amount,' + @ym + ' into #temptable from ' + @tablename)
执行失败:运行[dbo].[查询存储过程] ( @ym = 200802, @tablename = biz200802 ).

没有为第 4 列(属于 '#temptable')指定列。
没有行受影响。
(返回 0 行)
@RETURN_VALUE = 0
完成 [dbo].[查询存储过程] 运行。

请高人指点
...全文
576 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chickenben 2008-09-01
  • 打赏
  • 举报
回复
不是rtim,是rtrim(ltrim(@ym)) ,这样是最好的.
本人比较喜欢用tempdb..#temptable.
[Quote=引用 9 楼 arrow_gx 的回复:]
你的数据库里面有没有存在 #temptable 啊,存在的话,先删除掉啊
[/Quote]
arrow_gx 2008-08-31
  • 打赏
  • 举报
回复
ALTER PROCEDURE dbo.查询存储过程 
@ym int,
@tablename varchar(20)
AS
declare @sqlstr varchar(1000)
set @sqlstr='select EmpID,SubID,Amount,' + cast(@ym as varchar(10)) + ' into #temptable from ' + @tablename
exec(@sqlstr)
1979xt 2008-08-31
  • 打赏
  • 举报
回复
友情支持,不写代码好多年.
andyyan110 2008-08-31
  • 打赏
  • 举报
回复
arrow_gx 我的数据库里是没有#temptable 这个临时表的,我更换了一个临时表名,仍然一样报错
andyyan110 2008-08-31
  • 打赏
  • 举报
回复
wgzaaa,是这样,因为我sql语句确实不熟,rtim(@ym)是什么作用?

然后为什么要用##temptable,一定要全局临时表?

我按你的说法全部改完之后编译报:第5行:'rtim'附近有语法错误
arrow_gx 2008-08-31
  • 打赏
  • 举报
回复
你的数据库里面有没有存在 #temptable 啊,存在的话,先删除掉啊
wgzaaa 2008-08-31
  • 打赏
  • 举报
回复 1
#temptable from 是取不得值的,因此你还得改成 ##temptable from
wgzaaa 2008-08-31
  • 打赏
  • 举报
回复
'ym -->' ym
ym前空一格
wgzaaa 2008-08-31
  • 打赏
  • 举报
回复
exec('select EmpID,SubID,Amount,' + rtim(@ym) + 'ym into #temptable from ' + @tablename)
--整数与字符连接用rtrim,要为它指定列名,例上 "ym"
andyyan110 2008-08-31
  • 打赏
  • 举报
回复
又报错了.......

运行[dbo].[查询存储过程] ( @ym = 200802, @tablename = biz200802 ).

没有为第 4 列(属于 '#temptable')指定列。
没有行受影响。
(返回 0 行)
@RETURN_VALUE = 0
完成 [dbo].[查询存储过程] 运行。

到底是出了什么问题啊?编译都通过了,但执行总报这错,谁能解答一下疑惑,不胜感激!
andyyan110 2008-08-31
  • 打赏
  • 举报
回复
运行[dbo].[查询存储过程] ( @ym = 200802, @tablename = biz200802 ).

将 varchar 值 'select EmpID,SubID,Amount,' 转换为数据类型为 int 的列时发生语法错误。
没有行受影响。
(返回 0 行)
@RETURN_VALUE =
完成 [dbo].[查询存储过程] 运行。


报错!
arrow_gx 2008-08-31
  • 打赏
  • 举报
回复
ALTER PROCEDURE dbo.查询存储过程 
@ym int,
@tablename varchar(20)
AS
declare @sqlstr varchar(1000)
set @sqlstr='select EmpID,SubID,Amount,' + @ym + ' into #temptable from ' + @tablename
exec(@sqlstr)
arrow_gx 2008-08-31
  • 打赏
  • 举报
回复
ALTER PROCEDURE dbo.查询存储过程 
@ym int,
@tablename varchar(20)
AS
decalre @sqlstr varchar(1000)
set @sqlstr='select EmpID,SubID,Amount,' + @ym + ' into #temptable from ' + @tablename
exec(@sqlstr)

22,210

社区成员

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

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