判断sql0000临时表是否存在

cloudtarget 2011-07-07 05:01:48
declare @temptable_ as varchar(50)
select @temptable_= '#'+replace(convert(varchar(8),getdate(),112)+convert(varchar(12),getdate(),114),':','')

if object_id(tempdb..@temptable_) is null
create table t(a int)

提示我语法错误,怎么弄?
...全文
809 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
wildwild1 2011-07-08
  • 打赏
  • 举报
回复
坐看 SQL代码- -虽然看懂很简单- -,但是用起来怪怪的- -
中国风 2011-07-08
  • 打赏
  • 举报
回复
declare @temptable_ as varchar(50)
declare @vZq as varchar(8)
declare @rzrq as varchar(10)
declare @bmbm_dy as varchar(15)
declare @ckbm_dy as varchar(15)
declare @vChbm as varchar(30)
declare @djhm as varchar(18)
declare @dnxh int

declare @sql varchar(800)

select @temptable_= '#a'+replace(convert(varchar(8),getdate(),112)+convert(varchar(12),getdate(),114),':','') ,
@vZq='201001',
@rzrq='20100101',
@bmbm_dy='001',
@ckbm_dy='00101',
@vChbm='123456789012345',
@djhm='12345678901234567',
@dnxh=9

if object_id('tempdb..'+@temptable_) is null
begin
set @sql=' create table '+@temptable_ +'(t_zq varchar(8),t_rzrq varchar(10),t_bmbm varchar(15),t_ckbm varchar(15),t_chbm varchar(30),t_djhm varchar(18),t_dnxh int ,t_zy varchar(30)) '
print @sql
--exec(@sql)
set @sql=@SQL+char(13)+char(10)+'insert into '+@temptable_ +' values('''+@vZq+''','''+@rzrq+''','''+@bmbm_dy+''','''+@ckbm_dy+''','''+@vChbm+''','''+@djhm+''','+cast(@dnxh as varchar)+',''同价调拨拨入'') '
print @sql
--exec(@sql)
set @sql=@SQL+char(13)+char(10)+'select * from '+@temptable_
exec(@sql)
end
sunylf 2011-07-08
  • 打赏
  • 举报
回复
这个必须得用全局临时表。
冰岛男孩 2011-07-08
  • 打赏
  • 举报
回复
改用全局临时表不就行了吗
cd731107 2011-07-07
  • 打赏
  • 举报
回复
改用全局临时表不就行了吗
cd731107 2011-07-07
  • 打赏
  • 举报
回复
动态语句就是这样,执行完成相当于一个批处理就结束了,局部临时表也就释放掉了
cloudtarget 2011-07-07
  • 打赏
  • 举报
回复
只能不用临时表了,本来想让存储过程用完自动删除临时表的,现在非得自己删除了
cd731107 2011-07-07
  • 打赏
  • 举报
回复
把后面的语句再放到@sql,最后一起执行,或者放到一个##样式的全局临时表也可以
cloudtarget 2011-07-07
  • 打赏
  • 举报
回复
那我后面还要使用这个临时表怎么办
cd731107 2011-07-07
  • 打赏
  • 举报
回复
必须全部放一个@sql中,否则执行完成一个@sql后,这个批处理就结束了
另一个@sql执行时是不知道原来@sql中的那个表的,所以会出错
cd731107 2011-07-07
  • 打赏
  • 举报
回复
declare @temptable_ as varchar(50)
declare @vZq as varchar(8)
declare @rzrq as varchar(10)
declare @bmbm_dy as varchar(15)
declare @ckbm_dy as varchar(15)
declare @vChbm as varchar(30)
declare @djhm as varchar(18)
declare @dnxh int

declare @sql varchar(800)

select @temptable_= '#a'+replace(convert(varchar(8),getdate(),112)+convert(varchar(12),getdate(),114),':','') ,
@vZq='201001',
@rzrq='20100101',
@bmbm_dy='001',
@ckbm_dy='00101',
@vChbm='123456789012345',
@djhm='12345678901234567',
@dnxh=9

if object_id('tempdb..'+@temptable_) is null
set @sql=' create table '+@temptable_ +'(t_zq varchar(8),t_rzrq varchar(10),t_bmbm varchar(15),t_ckbm varchar(15),t_chbm varchar(30),t_djhm varchar(18),t_dnxh int ,t_zy varchar(30)) '
print @sql
--exec(@sql)
set @sql= @sql+'insert into '+@temptable_ +' values('''+@vZq+''','''+@rzrq+''','''+@bmbm_dy+''','''+@ckbm_dy+''','''+@vChbm+''','''+@djhm+''','+cast(@dnxh as varchar)+',''同价调拨拨入'') '
print @sql
--exec(@sql)
set @sql=@sql+'select * from '+@temptable_
exec(@sql)
cloudtarget 2011-07-07
  • 打赏
  • 举报
回复
declare @temptable_ as varchar(50)
declare @vZq as varchar(8)
declare @rzrq as varchar(10)
declare @bmbm_dy as varchar(15)
declare @ckbm_dy as varchar(15)
declare @vChbm as varchar(30)
declare @djhm as varchar(18)
declare @dnxh int

declare @sql varchar(800)

select @temptable_= '#a'+replace(convert(varchar(8),getdate(),112)+convert(varchar(12),getdate(),114),':','') ,
@vZq='201001',
@rzrq='20100101',
@bmbm_dy='001',
@ckbm_dy='00101',
@vChbm='123456789012345',
@djhm='12345678901234567',
@dnxh=9

if object_id('tempdb..'+@temptable_) is null
set @sql=' create table '+@temptable_ +'(t_zq varchar(8),t_rzrq varchar(10),t_bmbm varchar(15),t_ckbm varchar(15),t_chbm varchar(30),t_djhm varchar(18),t_dnxh int ,t_zy varchar(30)) '
print @sql
exec(@sql)
set @sql='insert into '+@temptable_ +' values('''+@vZq+''','''+@rzrq+''','''+@bmbm_dy+''','''+@ckbm_dy+''','''+@vChbm+''','''+@djhm+''','+cast(@dnxh as varchar)+',''同价调拨拨入'') '
print @sql
exec(@sql)
set @sql='select * from '+@temptable_
exec(@sql)


我执行后是这样的,为什么
create table #a20110707190218873(t_zq varchar(8),t_rzrq varchar(10),t_bmbm varchar(15),t_ckbm varchar(15),t_chbm varchar(30),t_djhm varchar(18),t_dnxh int ,t_zy varchar(30))
insert into #a20110707190218873 values('201001','20100101','001','00101','123456789012345','12345678901234567',9,'同价调拨拨入')
服务器: 消息 208,级别 16,状态 1,行 1
对象名 '#a20110707190218873' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 '#a20110707190218873' 无效。
中国风 2011-07-07
  • 打赏
  • 举报
回复
表名要動態這類需求感覺上沒有意義

臨時表--全域和局部 當然會話或連接有效

可以指定臨時表名,這樣省事
-晴天 2011-07-07
  • 打赏
  • 举报
回复
纠正一下,应该用like:
declare @temptable_ as varchar(50)
select @temptable_= '#'+replace(convert(varchar(8),getdate(),112)+convert(varchar(12),getdate(),114),':','')
if not exists(select 1 from tempdb..sysobjects where name like @temptable_+'______________________%')
create table t(a int)
-晴天 2011-07-07
  • 打赏
  • 举报
回复
照楼主的意思,应该这样写:
declare @temptable_ as varchar(50)
select @temptable_= '#'+replace(convert(varchar(8),getdate(),112)+convert(varchar(12),getdate(),114),':','')
if not exists(select 1 from tempdb..sysobjects where name=@temptable_+'______________________%')
create table t(a int)
qgqch2008 2011-07-07
  • 打赏
  • 举报
回复
if object_id('tempdb..@temptable') is null  
-晴天 2011-07-07
  • 打赏
  • 举报
回复
另外,楼主找到你搜索的那个临时表的几率等于零,因为你的临时表名是由年月日时分秒再加三位毫秒组成的,哪有那么精确啊!
-晴天 2011-07-07
  • 打赏
  • 举报
回复
参考:
select number into #t from master..spt_values where type='p'
go
declare @temptable_ as varchar(50)
set @temptable_= '#'+'t'
select * from tempdb..sysobjects where name like @temptable_ + '___________________________%'
/*
name id xtype uid info status base_schema_ver replinfo parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category cache
-------------------------------------------------------------------------------------------------------------------------------- ----------- ----- ------ ------ ----------- --------------- ----------- ----------- ----------------------- ------- ----------- ---------------- ---- -------- ------- -------- ----------------------- ----------- ----------- ----------- ----------- ----------- ----------- ------
#t__________________________________________________________________________________________________________________00000000002C 1490104349 U 1 0 0 0 0 0 2011-07-07 18:22:56.950 0 0 0 U 1 3 0 2011-07-07 18:22:56.950 0 0 0 0 0 0 0

(1 行受影响)

*/
go
drop table #t
中国风 2011-07-07
  • 打赏
  • 举报
回复
建臨時表需要用動態

use Tempdb
go

declare @temptable_ as varchar(50)
select @temptable_= 'Tempdb..#'+replace(convert(varchar(8),getdate(),112)+convert(varchar(12),getdate(),114),':','')

if object_id(@temptable_) is null
exec('create table ['+@temptable_+'](a int) select * from ['+@temptable_+']')

這個寫法不太好,造成動態建表后面的語句都需要在字符串里
中国风 2011-07-07
  • 打赏
  • 举报
回复
這是水園的草魚

先看看
加载更多回复(15)

34,590

社区成员

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

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