假設有一個表EMPLOYEE
與SQL Server上的列ID (int), Name (nvarchar), Surname(nvarchar)
。刪除SQL Server上只有一條記錄
這就是你所知道的全部。您無法看到表格中的數據。
您被命令只刪除其中一個名爲'Alice'的記錄。
你會如何編寫適當的查詢?
假設有一個表EMPLOYEE
與SQL Server上的列ID (int), Name (nvarchar), Surname(nvarchar)
。刪除SQL Server上只有一條記錄
這就是你所知道的全部。您無法看到表格中的數據。
您被命令只刪除其中一個名爲'Alice'的記錄。
你會如何編寫適當的查詢?
DELETE TOP (1)
FROM EMPLOYEE
WHERE Name='Alice'
DELETE TOP (1) FROM EMPLOYEE WHERE Name = 'Alice'
在SQL Server:
DELETE TOP 1 FROM EMPLOYEE WHERE Name = 'Alice'
如果你張貼代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊「代碼示例「按鈕('{}'),以便對其進行精確格式化和語法突出顯示!如果您發佈錯誤消息,請**使用blockquotes('「')正確格式化錯誤消息。 – 2011-04-15 12:35:06
所有建議的答案在這裏主要是相似的,所有的人是最佳至於你介紹你的問題。
但這會強制您的代碼刪除Name ='Alice'的第一條記錄。但是,如果您需要有一點額外的權力來選擇刪除表中有多個「Alice」的情況。但當然的ID必須是一個Primary Key
或Unique
SELECT FROM EMPLOYEE ID, Surname WHERE Name = 'Alice'
這將顯示的結果的話,你可以把目標記錄的ID將被刪除,並將其放置在下面的查詢(讓我們說的要刪除的記錄的ID是56)
DELETE FROM EMPLOYEE WHERE ID = 56
declare @Holder table (EmployeeKey int , Name varchar(24) , Surname varchar(24))
Insert into @Holder (EmployeeKey , Name , Surname)
select 201 , 'Alice' , 'Smith'
union all select 102 , 'Mary' , 'Smith'
union all select 203 , 'Alice' , 'Henderson'
union all select 104 , 'John' , 'Smith'
union all select 105 , 'Paul' , 'Johnson'
union all select 206 , 'Alice' , 'Jones'
Delete @Holder
/* Select * ............. while debugging, you can remove the 'Delete @Holder' and put in a 'Select *' to see the results (of what ~will be deleted) */
From
@Holder h
join
(select top 1 EmployeeKey from @Holder innerH where Name = 'Alice' /* order by EmployeeKey DESC */) as derived1
on h.EmployeeKey = derived1.EmployeeKey
select * from @Holder order by Name , EmployeeKey
/*
order by EmployeeKey DESC is optional, aka, if you want to "prefer" which one gets popped for delete, you can tweak it as needed
*/
你到目前爲止的代碼否則這看起來很像一個家庭作業:對 – 2011-04-15 12:33:32
你也知道ID是唯一的? – 2011-04-15 12:33:44
在刪除之前,請檢查名稱爲「Alice」的記錄數量。如果只有一條記錄,那麼下面的解決方案將會很好。如果沒有,找出哪個「愛麗絲」需要刪除,然後通過ID刪除。 – Jacco 2011-04-15 12:37:08