2016-02-24 88 views
0

IMAGE插入第一個空行

我想在第一個空的附加價值column.This是我的代碼 -

SqlCommand cmd = my_con.CreateCommand(); 
        cmd.CommandText = "insert into Contents(General_Exam) values(@CC)"; 
        cmd.Parameters.AddWithValue("@CC", txtAddOption.Text); 
        cmd.ExecuteNonQuery(); 
        comboBoxAddOption.Items.Add(txtAddOption.Text); 
        SqlCommand cmd1 = new SqlCommand("update TOP(1) Contents SET [email protected] where General_Exam IS NULL", my_con); 
        cmd1.Parameters.AddWithValue("@CC", txtAddOption.Text); 
        cmd1.ExecuteNonQuery(); 

但是,當我將它的值不是在第一個空行插入而不是它插入到最後一個空行。我認爲這是因爲頂(1)取頂行。但我想插入第一個空行任何人都有想法我怎麼能做到這一點請告訴!先謝謝了。

+0

您使用的是什麼RDBMS? http://stackoverflow.com/help/how-to-ask –

+4

定義「第一個」和「最後一個」。在SQL Server中沒有保證行的隱式順序。您需要明確標識要更新的記錄,在這種情況下可能使用明確的「ORDER BY」。 – David

+0

我正在使用sql服務器管理工​​作室(SQL) – Rock

回答

1

使用UPDATE TOP 1幾乎肯定是一個錯誤。如果您需要這樣做,您的設計有問題。同樣重要的是要注意 - TOP x沒有ORDER BY條款應該永遠不會發生。如果你發現自己在做這件事,那麼你應該回頭看看你在邏輯和/或設計中犯了什麼錯誤。

你的表應該有一個主鍵,你應該基於這個更新進行更新,而不是基於某些(當前)數據排序。

有關使用公共表表達式中使用 top控制在 updateorder by
+0

特別是作爲數據被加入的順序在任何sql server中都是不確定的,所以第一個行CAN和WILL會在不同的通話間發生變化,尤其是在一個擁有多個用戶的功能更強大的機器上 – TomTom

+0

@Tom H您是對的我需要將主鍵添加到某個列但是這只是內容表,每列內容都是相互獨立的所以如果我添加主鍵將使它們依賴,並且會產生更多問題:( – Rock

+0

@ Rock實際上,主鍵可以像允許標識行的ID列一樣簡單。一個主鍵 - 這是SQL中的一個核心概念,如果你想要可靠的更新。 – TomTom

0

此主題講座:

how can I Update top 100 records in sql server

也是在這裏討論:

SQL UPDATE TOP with ORDER BY?

;WITH CTE AS 
( 
SELECT TOP 1 * 
FROM Contents 
WHERE General_Exam IS NULL 
ORDER BY [Chife Complains] DESC 
) 
UPDATE CTE SET [email protected] 

注:希望有更好的你c與ORDER BY排序。 (您可能使用相同的排序方式)

+0

您的代碼一次又一次地在一個空列中添加值。但是,您的代碼和鏈接爲我提供了一些有關我的查詢的想法。 – Rock