2014-11-03 55 views
-1

我是SQL的新手,我從另一個已經離開的人手中接過了內部開發的SQL數據庫。現在我面臨着試圖通過row_number和column進行更新的問題。如何更新row_num和column?

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

增加'sql-server'標籤,基於'[..]''引用「樣式。 – 2014-11-03 07:59:29

+0

此表是否有主鍵?您可以將其識別爲針對列的一個或多個金鑰匙符號。沒有ORDER BY,行號不是可靠的字段用於更新。 – 2014-11-03 10:10:53

回答

0

對此一看:

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

希望這可以幫助你。

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表。

+0

嗨安德烈,這意味着列應該是「郵政編碼」?因爲我對SQL沒有任何瞭解,請原諒我。 至於'newvalue',我可以輸入字母數字? – zibin 2014-11-03 08:23:45

+0

應將文本'PK_COLUMN'替換爲包含每行(關鍵字段)的唯一值的列(字段)的名稱。文本'newvalue'應該替換爲您要爲特定行更新的郵政編碼的新值。 – 2014-11-03 12:41:16

+0

由於缺乏或唯一的順序是不確定的。 – Paparazzi 2014-11-03 19:23:47

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 
0

行號不是標識表中特定行的唯一標識符。爲了對特定行執行更新,您必須使用唯一標識符。爲此,您可以使用主鍵或行標識(而不是行號)。 在排序結果中,行號似乎是個不錯的選擇,但事實並非如此。 例:

考慮這樣一個表,

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。

0

該表沒有row_number列。 該查詢沒有排序。 這些行沒有順序。 在該示例中,函數row_number不確定。 現在行通常會由PK返回(如果存在的話)或行的輸入順序 - 但不能保證。

相關問題