谁能告诉我在sql server中 #tablename 和##tablename 的区别,他们何时自动删除,谢谢

Viper_sh 2001-12-03 08:51:59
...全文
178 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Viper_sh 2001-12-03
  • 打赏
  • 举报
回复
谢谢你,真的感谢,分很少,希望笑纳
昵称被占用了 2001-12-03
  • 打赏
  • 举报
回复
是动态语句的问题!

可以有两种方法解决:
1、用##,但要在调用前保证临时表不存在!
2、把这么多语句写到一个语句中:

CREATE PROCEDURE [pr_zs_reprint]
@dzhm varchar(9)
AS
SET NOCOUNT ON
DECLARE @sqlstr varchar(3000),@khmc varchar(30),@khdm varchar(9)
SELECT @err=0
SELECT @khdm= '(SELECT kh_dm FROM dzd WHERE dz_hm=@dzhm)'
SELECT @khmc= '(SELECT kh_mc FROM khdm WHERE kh_dm=@khdm)'

SELECT @sqlstr='SELECT md_dm,zs_rq,fp_hm,yw_rq,sum(jj_je) AS jh_je,sum(jj_sj) AS jh_sj INTO #'+ @dzhm +' FROM pludz WHERE dz_hm='''+@dzhm+''' GROUP BY md_dm,zs_rq,fp_hm,yw_rq

SELECT a.md_dm,b.kh_mc as md_mc,a.zs_rq,a.fp_hm,a.yw_rq,a.jh_je,a.jh_sj,'''+@khdm+''' as kh_dm,'''+@khmc+''' as kh_mc FROM #'+ @dzhm +' AS a LEFT OUTER JOIN khdm as b ON a.md_dm=b.kh_dm ORDER BY a.md_dm,a.zs_rq,a.fp_hm,a.yw_rq'

EXEC (@sqlstr)
END


Viper_sh 2001-12-03
  • 打赏
  • 举报
回复
是不是动态执行的错?不用动态执行就可以了,呵呵
Viper_sh 2001-12-03
  • 打赏
  • 举报
回复
select @err=0 去掉,谢谢你了,是不是很乱?费心了
Viper_sh 2001-12-03
  • 打赏
  • 举报
回复
-- 此储存过程执行重新打印已打印的对帐单功能
-- @dzhm 需要打印的对帐单号码
CREATE PROCEDURE [pr_zs_reprint]
@dzhm varchar(9)
AS
SET NOCOUNT ON
DECLARE @sqlstr varchar(300),@khmc varchar(30),@khdm varchar(9)
SELECT @err=0
SELECT @sqlstr='SELECT md_dm,zs_rq,fp_hm,yw_rq,sum(jj_je) AS jh_je,sum(jj_sj) AS jh_sj INTO #'+ @dzhm +' FROM pludz WHERE dz_hm='''+@dzhm+''' GROUP BY md_dm,zs_rq,fp_hm,yw_rq'
EXEC (@sqlstr)
SELECT @khdm= (SELECT kh_dm FROM dzd WHERE dz_hm=@dzhm)
SELECT @khmc= (SELECT kh_mc FROM khdm WHERE kh_dm=@khdm)
SELECT @sqlstr='SELECT a.md_dm,b.kh_mc as md_mc,a.zs_rq,a.fp_hm,a.yw_rq,a.jh_je,a.jh_sj,'''+@khdm+''' as kh_dm,'''+@khmc+''' as kh_mc FROM #'+ @dzhm +' AS a LEFT OUTER JOIN khdm as b ON a.md_dm=b.kh_dm ORDER BY a.md_dm,a.zs_rq,a.fp_hm,a.yw_rq'
EXEC (@sqlstr)
END
昵称被占用了 2001-12-03
  • 打赏
  • 举报
回复
方便的话,贴出存储过程看看!
昵称被占用了 2001-12-03
  • 打赏
  • 举报
回复
没理由在一个储存过程中会出现这种情况的!


Viper_sh 2001-12-03
  • 打赏
  • 举报
回复
可是,上面两句命令在同一个储存过程中的啊!是紧接着的,谢谢haiwer指点
昵称被占用了 2001-12-03
  • 打赏
  • 举报
回复
#tt在存储过程完成的时候会自动删除!##tt不会!
Viper_sh 2001-12-03
  • 打赏
  • 举报
回复
谢谢haiwer,再请问,在一个储存过程中,我先用select * into #tt from ...
接着 select * from #tt 为什么系统提示没有#tt 这个对象,如果把#tt 替换成##tt,则可以成功,但第二次执行时系统提示#tt已经存在了,为什么?谢谢指教
昵称被占用了 2001-12-03
  • 打赏
  • 举报
回复
#tablename 本地临时表,只有创建者可见,在连接结束时删除.
##tablename 全局临时表,其他使用者也可见,在创建者连接结束后,没有引用时自动删除.

都可以显式的用DROP TABLE......删除!

34,566

社区成员

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

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