以下代碼旨在更新 emp 記錄。但是,如果 Zip 為空,則不會更新資料。
我沒有撰寫這段代碼,我不確定使用這種語法的初衷,我看不出它有什么好處。
例子:zip = iif(zip<>@zip,@zip,zip)
我只想寫這個:zip = @zip
我錯過了什么嗎?
只要@zip 引數不為空,目的就是更新 zip 欄位。問題是它沒有得到更新,當前 zip 欄位為空。
UPDATE emp
SET first_name = iif(first_name <> @first_name,@first_name,first_name)
,last_name = iif(last_name <> @last_name, @last_name, last_name)
,dob = iif(dob <> @dob,@dob,dob)
,social_security_num = iif(social_security_num<>@social_security_num,@social_security_num,social_security_num)
,dl_num = iif(dl_num<>@dl_num,@dl_num,dl_num)
,dl_state = iif(dl_state<>@dl_state,@dl_state,dl_state)
,gender = iif(gender<>@gender,@gender,gender)
,address1 = iif(address1<>@address1,@address1,address1)
,address2 = iif(address2<>@address2,@address2,address2)
,city = iif(city<>@city,@city,city)
,zip = iif(zip<>@zip,@zip,zip)
,STATE = iif(state<>@state,@state,state)
,primary_phone = iif(primary_phone<>@primary_phone,@primary_phone,primary_phone)
,emergency_contact = iif(emergency_contact<>@emergency_contact,@emergency_contact,emergency_contact)
,secondary_phone = iif(secondary_phone<>@secondary_phone,@secondary_phone,secondary_phone)
,emergency_contact_phone = iif(emergency_contact_phone<>@emergency_contact_phone,@emergency_contact_phone,emergency_contact_phone)
,emp_pay_type_id = @emp_pay_type_id
WHERE emp_id = @emp_id
uj5u.com熱心網友回復:
有一個區別:該列永遠不會更新為null.
任何與 的比較null都是不正確的(特殊IS NULL運算式除外),即使與另一個比較也是如此null。
表達方式
iif(zip<>@zip,@zip,zip)
具有相同的效果
case when @zip is null or zip is null then zip else @zip end
另請注意,如果該列是它本身null,它也永遠不會被更新。
uj5u.com熱心網友回復:
這基本上是在說明:如果 zip 列不等于 zip,那么新值應該是 @zip(變數),否則新值應該是現有值。
您的方法不是進行比較,而是將其設定為變數。
兩者都應該輸出相同的結果,除非變數為空。這將導致短路,IF 為 FALSE,并保留當前值。
DECLARE @table TABLE (zip NVARCHAR(10))
INSERT INTO @table (zip) VALUES ('90210-1234')
DECLARE @zip NVARCHAR(10)
SELECT *
FROM @table
UPDATE @table
SET zip = IIF(@zip<>zip,@zip,zip)
SELECT *
FROM @table
UPDATE @table
SET zip = @zip
SELECT *
FROM @table
SET @zip = '90210-1234'
UPDATE @table
SET zip = @zip
SELECT *
FROM @table
zip
---
90210-1234 --Original Value
zip
---
90210-1234 --Not updated because of short circuit
zip
---
NULL --Set to NULL as the variable was NULL
zip
---
90210-1234 --Set to a value
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/526713.html
下一篇:如何創建滿足通用要求的實體
