使用随机生成的数字创建临时表名称

时间:2013-02-07 17:04:06

标签: sql sql-server temp-tables declare

到目前为止,我有这段代码:

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值'## show'转换为数据类型int时,转换失败。

我想要实现的是每次执行查询时都要创建一个表## show + random number。

示例:

##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)

但如何调用或插入此表?

3 个答案:

答案 0 :(得分: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 '+@rndtb+'
        select *
        from yourtable'


exec (@sql)

答案 1 :(得分:0)

使用它:

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

答案 2 :(得分:0)

您需要动态SQL

动态SQL的诅咒和祝福

http://www.sommarskog.se/dynamic_sql.html