2016-05-10 50 views
3

我希望sql查詢更新記錄。例如有3列在我的表 -用於更新空值的記錄的SQL查詢

名稱,地址,電子郵件

,當我更新任何一列其他列的值應不設置爲null,他們空。像

Update tbl_Student set Name = 'XYZ' where id = 1 

在上面的情況下,只有名稱列應該更新,其他列應該更新爲null。

僅供參考,

由於有,我需要設置爲空值,這就是爲什麼我想要某種查詢做兩個多列。像 -

ID ADDRESS  NAME  EMAIL  
1  PARK ROAD JOHN  [email protected] 

我只想更新名稱,並希望該領域的其他應null.Like

Update Table SET NAME = 'NICK' WHERE ID = 1 

然後更新的輸出應該是 -

ID ADDRESS  NAME  EMAIL  
1  NULL   NICK  NULL 
+0

我真的不明白這裏的問題,糾正我,如果我錯了,你需要更新記錄的名稱和設置其他爲空值? – Dean

+0

什麼?我是說爲什麼?不是很清楚你想達到什麼目的。設置'address = null,email = null'也許?或觸發器?請重新說明問題,並告訴我們爲什麼你需要它,以及明確更新列有什麼問題。 – Pred

+1

然後您可以簡單地刪除該記錄並插入一個只有一個列值的新行(從表中刪除id = 1,插入表(id,name)值(1,'abc')希望你不想要在這裏設置id = NULL :) –

回答

0

一個快速IDEEA那麼你會希望得到兩條語句:

  1. 其中一個使null爲空(除了id)=>在第二個Update語句之前執行的觸發器上放置一個觸發器。

  2. 另一個用實際值更新所需的列。

您可以重新考慮表結構更簡單的一個:

ID | Column_Name | Column_Value 

,而不是與像NULL列一個巨大的表:

ID | COLUMN_1 | COLUMN_2 | ..... | COLUMN N 
-------------------------------------------- 
2 | NULL | NULL |  | "string" 
+0

如果您知道要設置的列和其他名稱,爲什麼要執行2個查詢?運行2個查詢而不是1個的好處是什麼? – Pred

+0

@Pred我不能在這裏提出任何有效的觀點。也許他想要一些通用的,但不是通用的。 – besciualex

+0

是的你是對的我需要一些動態的設置列空。 –

0

嘗試這樣,

--Case-1 
If @NAME is not null 
UPDATE tbl_Student 
SET NAME = @NAME 
    ,Address = null 
    ,Email = null 
WHERE id = 1 
--Case-2 
If @Address is not null 
UPDATE tbl_Student 
SET NAME = null 
    ,Address = @Address 
    ,Email = null 
WHERE id = 1 
--Case-3 
If @Email is not null 
UPDATE tbl_Student 
SET NAME =null 
    ,Address = null 
    ,Email = @Email 
WHERE id = 1 
0

您可以創建一個爲此觸發。

CREATE TRIGGER [dbo].[TRG_UPD_STUDENT] ON [dbo].[tbl_Student] 
FOR UPDATE 
AS 

IF UPDATE(Name) and (inserted.name <> NULL) 
BEGIN 
    Update tbl_Student set Address = NULL, Email = NULL where id = inserted.id 
END 

IF UPDATE(Address) and (inserted.Address <> NULL) 
BEGIN 
    Update tbl_Student set name = NULL, Email = NULL where id = inserted.id 
END 

IF UPDATE(Email) and (inserted.Email <> NULL) 
BEGIN 
Update tbl_Student set name = NULL, Address = NULL where id = inserted.id 
END 
+0

遞歸怎麼樣?觸發器中的「UPDATE」會觸發觸發器嗎? (我愛英語) – Pred

+0

這就是爲什麼我已經提出了所有條件和條款。請看看這個。 –

+0

採取了點。 Sidenode:我刪除了評論,因爲列名稱提到他們來自另一個查詢。 – Pred

0

我的建議是,刪除該記錄,並插入一個新的只有列中有值的交易。因爲我認爲你不想將NULL設置爲id(也可能是其他一些列)。

樣品:

DELETE FROM tbl_Student WHERE id = 1 
INSERT INTO tbl_Student(id,Name) VALUES(1,'XYZ') --All other column will be nullable 

注: - 如果id列是IDENTITY,那麼你有SET IDENTITY_INSERT

0
DECLARE @NVC_Query nvarchar(max) = '' 

SET @NVC_Query = 'UPDATE Tour_Table 
SET' 

select @NVC_Query += ' 
    ' + columns.name + ' = NULL ,' 
from sys.tables INNER JOIN 
    sys.columns 
ON tables.object_id = columns.object_id 
WHERE tables.name = 'Your table' 
    AND columns.name <> 'The only col you want to update' 

SET @NVC_Query += ' 
    your colum = your_val 
WHERE Yourcondition' 

--SELECT @NVC_Query 
EXEC SP_EXECUTESQL @NVC_Query 

使用動態SQL來管理您所要完成的任務。這將比以前的所有答案更容易