就业数据资源平台
当前位置:首页 > 数据库技术
处理SQLServer表的数据插入到错误列中

为了描述这个问题,我将创建一个简单的表,并且插入两个带有如下显示的相同数据类型的列。
  CREATE TABLE SwapData(id int,value1 varchar(50),value2 varchar(50))
  GO
  现在这个表已经创建了,接下来我们在这个表中插入一些值。在这里,我使用一个UNION ALL语句,因此我就可以做一次INSERT,但是这也可以通过执行几个插入语句来完成。
  INSERT INTO Swapdata
  SELECT 1,10,100
  UNION ALL
  SELECT 2,20,200
  UNION ALL
  SELECT 3,30,300
  UNION ALL
  SELECT 4,40,400
  UNION ALL
  SELECT 5,50,500
  UNION ALL
  SELECT 6,60,600
  UNION ALL
  SELECT 7,70,700
  UNION ALL
  SELECT 8,80,800
  UNION ALL
  SELECT 9,90,900
  UNION ALL
  SELECT 10,11,110  
 现在数据已经插入,我们可以看到较大的值应该在"value1"。因此现在我们需要交换“value1” 和“value2”中的值。
  这里有很多种方法来解决这个问题。正如在问题部分所讨论的,你可以删除这些数据然后再重新插入,或者你可以创建一个新的列然后把这些数据移过去,但是这里还有更简单的方法。
  其中一个间的方法显示如下,那就是创建一个临时的变量,这个变量允许你更新数据和交换列值。
  DECLARE @temp AS varchar(50)
  UPDATE swapdata SET @temp=value2,value2=value1,value1=@temp
  我们不是在这个表中创建一个临时列,而是通过声明一个临时变量来交换这两个列中的数据。上面的代码解释如下:
  首先创建一个临时变量。


然后把列"value2"的数据放在@temp变量中。
  接着把列"value1"的数据放在"value2"列中。
  最后把@temp的值放在"value1"列中。
  现在,我们来查询这个表的行。
  SELECT * FROM swapdata
  我们可以看到我们的表已经正确更新了。 


 我尝试相同的砝码来解决三个列的问题。
  让我们在“swapdata”表中再添加第三个列“value3”。
  ALTER TABLE swapdata ADD value3 varchar(50)
  GO
  UPDATE swapdata SET value3=value2+'0'
  SELECT * FROM swapdata


让我们如下交换这些列的值:
  · "value1"获得"value3"的数据
  · "value2"获得"value1"的数据
  · "value3"获得"value2"的数据
  我们将按照第二种解决方法来获得这个结果。
  UPDATE swapdata SET value1=value3,value2=value1,value3=value2
  SELECT * FROM swapdata
  /NewsFiles/2009-6/15/84253499.jpg
  图五
  注意,交换列的系列可以按照任何顺序来给定。只要确保这个值在每个请求输出结果中传递即可。我认为这些方法对于每个人都很有用,只要交换列值,无需为临时列和变量而烦恼。
  因此下次你再遇到在一张表的多个列中交换数据,只需记住这个简单的方法。

就业数据资源平台