大家看看這兩段SQL有什麼問題.

Select top(1)  columnA
from  tableABC
where tableABC.Status = 'A'
order by columnA, columnB
====================================================
有一個Table DealInfo, deal_ID 是唯一主鍵.

update DealInfo
set colA = (select colA from DealInfo where deal_ID = @OLD_deal_ID)
where name = @New_deal_name and deal_ID = @New_deal_ID

update 嗰條, 如果冇 @old_deal_id, 會點?

TOP

update 嗰條, 如果冇 @old_deal_id, 會點?
henrywho 發表於 2013-6-4 13:55


會死.  佢目的係根據舊果條的資料 複製去新果條. btw, 這個不是重點.

TOP

回復 1# garrodran99


    1. no need to order by B

2. no need to have where name

is it correct !?

TOP

會死.  佢目的係根據舊果條的資料 複製去新果條. btw, 這個不是重點.
garrodran99 發表於 2013-6-4 15:59


如果係打工, 寫一條偶然會死嘅 SQL, 會害到人好慘

講開又講, 原來好少人識/會用咁樣嘅 update syntax:
  1. update  (
  2.         select  ... as A,
  3.                 ... as B
  4.         from    ....
  5.         where   ....
  6.         )
  7. set     A = B
  8. where   ....
複製代碼

TOP

回復  garrodran99


    1. no need to order by B

2. no need to have where name

is it correct  ...
fred2088 發表於 2013-6-4 16:55

寫呢兩段野果個係美國返黎o既碩士

TOP

本帖最後由 tuyylihk 於 2013-6-5 09:39 編輯
寫呢兩段野果個係美國返黎o既碩士
garrodran99 發表於 2013-6-5 09:15

就語法黎睇真係睇唔出問題bor
但累贅確實係有

第一條只會show一條record
既然已經先以colA做排序,之後無論再點以colB做排序
結果都唔會有改變,所以order by colB係多餘

第2條因為已經係WHERE主鍵
就正常諗法係唔會再考慮其他野
所以只會兩者取其一
正路諗法就係取主鍵,所以WHERE name係多餘

如果真係有問題,仲要係偶發
我覺得check有冇lock實際d...

要唔係架話,就係第2條其實根本諗錯野
其實係咪想同時update埋name?

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

得1條record, order by有何用?

TOP

i) reply: order by Column B 係多餘的

ii) 如colA 不能為Null, 而 @OLD_deal_ID 不存在於 DealInfo,
把null update去colA就會發生錯誤

update DealInfo
set colA = (select colA from DealInfo where deal_ID = @OLD_deal_ID)
where name = @New_deal_name and deal_ID = @New_deal_ID

TOP