【问题标题】:Creating a temporary table name with a randomly generated number使用随机生成的数字创建临时表名
【发布时间】:2013-02-07 17:04:05
【问题描述】:

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

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+随机数。

例子:

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

但是如何调用或插入这个表呢?

【问题讨论】:

  • 我觉得你的问题主题和问题需要清理一下......它有点到处都是。
  • 通过将答案合并到问题中,您使帖子变得混乱。例如,您修复了转换问题但没有删除错误消息,现在它没有意义了。但是,如果您确实删除了该消息,那么整个问题可能毫无意义,因为它可能不再看起来像一个问题。相反,如果您想展示您最终得到的结果,您应该将其发布为答案

标签: sql sql-server temp-tables declare


【解决方案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)

【讨论】:

  • 我怎样才能选择进入新创建的表? IE。从table1中选择前5名进入@rndtb
  • @JohnZ 看到我的编辑,你将不得不使用动态 sql 插入到表中。
【解决方案2】:

使用这个:

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

【讨论】:

    【解决方案3】:

    你需要动态 SQL

    动态 SQL 的祸与福

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

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2020-10-31
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多