我是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]*
答案 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返回(如果存在行或输入行的顺序) - 但这不能保证。