2013-10-10 26 views
1

我有一個數據源正在從中更新現有表。如果已包含數據,則不允許使用空值更新列

只有當源數據不是NULL時,才更新每個字段中的值的方法?

+0

我不明白你是如何做一個插入和更新值的麻煩(你不插入不更新?)。想要提供更多關於這裏發生了什麼的信息? – Twelfth

+0

也許'UPDATE表SET列= CASE當@input IS NULL那麼列ELSE @input END'? – axblount

+0

對不起,我正在做一個更新,如果它符合某些標準。只是不想更新具有空數據的列。 – user2395035

回答

4

你應該使用ISNULL(@paramA, ColumnA)

UPDATE someTable 
set ColumnA = ISNULL(@ParamA, ColumnA) 
WHERE 
..... 
+0

如果更新值爲NULL,我想將當前數據保留在列中。 – user2395035

+1

這個答案實現了這個目標。 – mrtig

+0

這是一個很好的答案。謝謝。 – usefulBee

-1

考慮到,美中提到,如果源數據不爲null,考慮然後更新

--Create a sample table 

DECLARE @SAMPLE TABLE 
(
SourceID INT IDENTITY(1,1), 
SourceData NVARCHAR(255) 
) 

--Create dummy data 

INSERT INTO @SAMPLE VALUES ('SOMETHING') 
INSERT INTO @SAMPLE VALUES (NULL) 
INSERT INTO @SAMPLE VALUES ('SOMETHING') 


--update source data that is not null, this will update entire table 

UPDATE @SAMPLE 
SET SourceData = 'New Data' 
FROM @SAMPLE t1 
INNER JOIN (
SELECT * FROM @SAMPLE Where SourceData is not null) t2 
ON t1.SourceID = t2.SourceID 

或者如果你只是想更新選定的記錄

--Pass in your variable 

DECLARE @SourceID INT 

--play around your source id 

SET @SourceID = 2 

--if the particular id is with null data, then update will never perform 

IF EXISTS(SELECT 1 FROM @SAMPLE WHERE SourceID = @SourceID and SourceData is not null) 
Update @SAMPLE 
set SourceData = 'New Item' 
where SourceID = @SourceID 
+0

您的解決方案不能按照OP要求的方式工作。他們希望更新匹配源表的_all_行,但是當源數據中的_field_爲NULL時,忽略它並保留現有的字段數據。如果一個字段爲「NOT NULL」,您的答案只會更新_entire_行。 – Tony

+0

糾正我,如果我錯了,所以有2個表源表和目標表,每當任何時候,OP想要根據源表數據更新目標表時,只要源數據不爲空? –

相關問題