2013-02-07 26 views
0

到目前为止,我有这样的代码:创建临时表名与随机生成的数字

declare @random int, @upper int, @lower int, @rndtb varchar(20) 
set @lower = 1 
set @upper = 999 
select @random = ROUND(((@upper - @lower) * rand() + @lower),0) 
select @rndtb = '##show'+cast(@random as varchar(20))+'' 

但是,让我转换VARCHAR值“##秀”时

转换失败数据类型int。

我想要实现的是每次执行查询时创建一个表## show +随机数。

例子:

##show01 
##show78 
##show43 

编辑什么@bluefeet说,发现一种方法来创建与

Declare @SQL VarChar(1000) 

SELECT @SQL = 'Create Table ' + @rndtb + '(' 
SELECT @SQL = @SQL + 'ID int NOT NULL Primary Key, FieldName VarChar(10))' 

Exec (@SQL) 

表,但我怎么来电或插入此表?

+0

什么数据库您使用动态SQL的祝福? –

+0

SQL Server 2008 – JohnZ

+0

我觉得你的问题主题和问题需要清理一下......这有点复杂。 – JDPeckham

回答

1

既然你要添加的参数@random为字符串,你需要将它转换为一个varchar因此它可以被级联到弦线部分:

select @rndtb = '##show'+cast(@random as varchar(20))+'' 

你完整的代码将是:

declare @random int, @upper int, @lower int, @rndtb varchar(20) 
set @lower = 1 
set @upper = 999 
select @random = ROUND(((@upper - @lower) * rand() + @lower),0) 
select @rndtb = '##show'+cast(@random as varchar(20))+'' 

根据您的编辑,您将需要使用动态SQL插入到新表:

select @SQL = 'insert into '[email protected]+' 
     select * 
     from yourtable' 


exec (@sql) 
+0

我该如何选择新创建的表格?即。从表1中选择前5到@rndtb – JohnZ

+0

@JohnZ看我的编辑,你将不得不使用动态sql插入到表中。 – Taryn

0

使用这样的:

select @rndtb = '##show'+CONVERT(VARCHAR(20), @random, 0)