一尘不染

用一个随机生成的数字创建一个临时表名

sql

到目前为止,我有以下代码:

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)

但是如何调用或插入此表?


阅读 195

收藏
2021-03-08

共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)
2021-03-08