存储过程中使用临时表的问题。

tristsesame 2003-11-24 03:58:09
我刚才在写一个存储过程时,用到了一个临时表,总是运行不正常。
其中Table1无主键,且有重复的字段。
Table1和Table2都是通过参数传值过去。

存储过程大概是这样的:

Set @str = 'SELECT IDENTITY(int,1,1) AS id,Value1,Value2 INTO #temp FROM ' +@Table1
Execute(@str)

Set @str = 'INSERT ' + @Table2
Set @str = @str + ' SELECT Value1,Value2 FROM #temp WHERE id IN '
Set @str = @str + '(SELECT MIN(id) AS id FROM #temp GROUP BY Value1)'
Execute(@str)

运时总提示
对象"#temp" 不存在.

我找不到原因,
但当我把#temp改成##temp后
好像就不会出错了.

请各位指点一二
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tristsesame 2003-11-24
  • 打赏
  • 举报
回复
明白了,谢谢:)
yown 2003-11-24
  • 打赏
  • 举报
回复
对,就是表的作用范围,因为每执行一个EXECUTE(),实际上其内的SQL语句就是一个单独的过程,即局部作用
伍子V5 2003-11-24
  • 打赏
  • 举报
回复
所以你这中情况可以考虑##temp代替#temp
zjcxc 2003-11-24
  • 打赏
  • 举报
回复
局部临时表只在创建它的模块中存在,所以会出错.

解决的方法是,要么将所有的处理放在一个语句
要么用全局临时表.
txlicenhe 2003-11-24
  • 打赏
  • 举报
回复
将临时表改为全局的即可
#temp改为##temp
zjcxc 2003-11-24
  • 打赏
  • 举报
回复
--临时表的作用域问题,改为下面的:

Set @str = 'SELECT IDENTITY(int,1,1) AS id,Value1,Value2 INTO #temp FROM ' +@Table1+'
INSERT ' + @Table2 +'
SELECT Value1,Value2 FROM #temp WHERE id IN
(SELECT MIN(id) AS id FROM #temp GROUP BY Value1)'
Execute(@str)

22,210

社区成员

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

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