【问题标题】:Temp table foreach update临时表 foreach 更新
【发布时间】:2015-05-04 09:56:20
【问题描述】:

我正在尝试遍历生成的temp table 的所有记录以更新密钥。表是分步合并的,只有表完成后才能分配索引。

问题是临时表有no index,当我想循环遍历它,所以使用语句UPDATE tablename WHERE index = value是没用的

有没有办法让我循环遍历temp table 并更新当前选定的记录。每条记录的 id 应为 incremented

例子:

IDField     Field1      Field2
0           1           1
0           2           1
0           1           2
0           3           3

遍历每条记录以将其更改为:

IDField     Field1      Field2
1           1           1
2           2           1
3           1           2
4           3           3

这可能without an index,如果显示我应该怎么做?

【问题讨论】:

  • 循环遍历每条记录是什么意思? SQL Server 最适用于基于集合的数据处理。还可以分享您编写的代码,它可以让用户更好地了解您想要实现的目标。
  • @M.Ali 代码/表不是问题。但我会为这个想法添加一个演示表
  • 现在你如何定义哪一行被分配了什么数字?你是如何开始填充这个 Temp 表的?
  • 我可以想到两种可能的解决方案,1)如果表是使用Create Table 语句创建的,则在创建表时使用标识字段填充此列。 2) 如果您使用SELECT * INTO #Temp FROM Table 即时创建此表,则在您的选择语句中使用ROW_NUMBER() 为该列赋予增量值。
  • @M.Ali 谢谢!使用 ROW_NUMBER 解决了这个问题:)

标签: sql-server stored-procedures foreach temp-tables


【解决方案1】:

您可以使用Cursor 循环访问您的查询结果。这是一个如何在SELECT Table_Name FROM Information_Schema.Tables中循环Table_Name的示例

DECLARE @TableName nvarchar(128)
DECLARE @getTableName CURSOR
SET @getTableName = CURSOR FOR
select Information_SCHEMA.tables.Table_name from Information_SCHEMA.tables
OPEN @getTableName
FETCH NEXT
FROM @getTableName INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
    -- Use @TableName the way you need
    FETCH NEXT
    FROM @getTableName INTO @TableName
END
CLOSE @getTableName
DEALLOCATE @getTableName

【讨论】:

  • @Yazabpro 感谢您的回复,M.Ali 的评论使用 ROW_NUMBER 和 select into 解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
相关资源
最近更新 更多