2014-04-08 100 views
0

我正在寫一個更新查詢更新像下面的一些空白值之間:「喜歡」和「=」哪一個更approprite爲什麼在TSQL

UPDATE TA 
SET TA.Trust_Desc = TB.Trust_Desc 
FROM TB 
INNER JOIN TA 
ON TA.TrustID = TB.TrustID 
AND TA.Trust_Desc like '' 

UPDATE TA 
SET TA.Trust_Desc = TB.Trust_Desc 
FROM TB 
INNER JOIN TA 
ON TA.TrustID = TB.TrustID 
AND TA.Trust_Desc = '' 

兩者都在工作。但我想知道哪一個(「喜歡」或「=」)更合適,爲什麼?

+0

使用等於運算符的精確匹配,這似乎是你需要的。 –

+1

第二個更合適(我認爲),因爲它記錄了你的意圖。如果我看到第一條語句,我會假設一個懶散的程序員忘記添加通配符。 –

回答

0

就像你讓你與外卡運營商一起工作,你可以在你的案例中使用它來像'davyjon%'一樣獲得所有以davyjon開頭的結果,並確保你可以放置'davyjones',你可能會也使用=在這種情況下

2
AND TA.Trust_Desc like '' 

此聲明決定TA.Trust_Desc是否與模式''相對應。在你的情況下,它是沒有模式(沒有多大意義)。這個操作可能相當昂貴,如果可能,使用'='。

AND TA.Trust_Desc = '' 

這是聲明比較TA.Trust_Desc與字符串''。這通常是更快的操作,所以使用這一個,它也更有意義。

模式是一個字符串,使用像任何字符串%的通配符。例如,你可以有一個包含這三個字符串的表格。 的 'Hello World' '你好世界' '你好的人'

LIKE語句列 '你好%' 將成爲 '世界您好' 和真正的 '你好的人' 喜歡 '%世界' 聲明列將是真實的'Hello World'和'Hi World'

2

如果知道匹配的確切值,Equals運算符會更好,因爲它將允許使用索引。 Like更可能會更慢(除非您專門使用'abc%'搜索,其中可以使用索引)。

0

=精確匹配

我將添加到條件

UPDATE TA 
    SET TA.Trust_Desc = TB.Trust_Desc 
    FROM TB 
INNER JOIN TA 
    ON TA.TrustID = TB.TrustID 
    AND TA.Trust_Desc = '' 
    AND TB.Trust_Desc <> '' 
相關問題