如何更新row_num和列?

时间:2014-11-03 07:52:45

标签: sql sql-server tsql

我是SQL的新手,我从另一个离开的人那里接管了一个内部开发的SQL数据库。现在我正面临尝试通过row_number和列进行更新的问题。

SQL文件的详细信息如下,我希望能够通过row_number和特定列(例如邮政编码)进行更新。但我不知道如何继续。

E.g我有一个行号518,其中填写了错误信息的地址字段和邮政编码。但我无法编辑它。看起来我必须编写SQL代码才能修改它,但我没有SQL语句的先验知识。

*SELECT TOP 1000 [SalesGroupNo]
      ,[CustomerName]
      ,[Address]
      ,[PostalCode]
      ,[ContractType]
      ,[Segmentation]
      ,[Channel]
      ,[SalesPerson]
      ,[Supervisor]
      ,[Source]
      ,[createDate]
      ,[modifiedDate]
      ,[contactno]
      ,[noofvisit]
      ,[BillingName]
      ,[BillingAddress]
      ,[ContactPerson]
      ,[PaymentTerm]
      ,[Status]
      ,[LastUpdatedBy]
      ,[OutletPostalCode]
      ,[CSPLID]
      ,[StatusDate]
      ,[Group]
      ,[Postal]
      ,[isGroup]
      ,[Remarks]
      ,[BA]
      ,[DateFrom]
      ,[DateTo]
  FROM [OMS].[dbo].[Outlets]*

5 个答案:

答案 0 :(得分:0)

看看这个:

UPDATE table SET column1 = expression1, column2 = expression2 WHERE conditions;

希望这可以帮到你。

答案 1 :(得分:0)

在各种数据库系统中,行号函数返回结果集中行的序号;在您的场景中,如果您必须根据结果集中的位置来更新特定行,那么它可能会很有用。

见这里:http://msdn.microsoft.com/library/ms186734(v=sql.105).aspx

作为指导,如果可能的话,最好通过表格的键而不是行集中的位置进行更新。

在T-SQL中更新查询以更新结果集的第518行而不知道其主键的值,应为:

update [OMS].[dbo].[Outlets]
set PostalCode = 'newvalue'
where PK_COLUMN = (
    select PK_COLUMN
    from [OMS].[dbo].[Outlets]
    where ROW_NUMBER = 518)

但您必须将PK_COLUMN替换为您Outlets表主键的列(或列)的名称。

答案 2 :(得分:0)

你必须使用rom_num函数。

update table
set PostelCode=your_value
from 
 (
    Select row_number() over (partition by table_column order by table_column ) 
     AS SrNo,* from     
    tableName
  )table
  where table.SrNo=your_rowNum

答案 3 :(得分:0)

行号不是标识表中特定行的唯一标识符。要对特定行执行更新,您必须使用唯一标识符。为此,您可以使用主键或行ID(不是行号)。 在排序结果中,行号似乎是一个不错的选择,但事实并非如此。 例如:

考虑像这样的表,

RowID      RowNumber  Name    Salary
239482989     1       john    10000
787934576     2       paul    20000
989984334     3       john    40000

下表使用“名称”列

表示上述的排序版本
RowID      RowNumber  Name    Salary
239482989     1       john    10000
989984334     2       john    40000
787934576     3       paul    20000

但是每次要对它进行排序时,上述结果都会有所不同。因为它在两个不同行的排序列中具有与'john'相同的值。因此,没有特定的方法可以首先选择哪一行。它随机工作。因此,当您更新表时,您不能使用行号,因为它有时会产生错误的输出。

我建议您在更新表行时使用主键或行ID。

答案 4 :(得分:0)

该表没有row_number列。 该查询没有订单。 这些行没有顺序。 在该示例中,函数row_number是不确定的。 现在行通常会由PK返回(如果存在行或输入行的顺序) - 但这不能保证。