這可能更像是一個「最佳實踐」問題,而不是真正的代碼問題。在另一個存儲過程中獲取存儲過程的參數。
我有一個存儲過程來更新表,但需要從另一個表中的幾個值。
前兩個選項從表中獲取值,然後用於更新語句中。
的選擇statments:
Select @iStatusDropDownValueID = iDropDownValueID
From DropDownValue
Inner Join DropDownValueType On DropDownValue.iDropDownValueTypeID = DropDownValueType.iDropDownValueTypeID
Where DropDownValueType.vchDropDownValueTypeName = 'Status'
AND DropDownValue.vchDropDownValueName = 'Scheduled'
AND DropDownValue.tiRecordStatus = 1
And DropDownValueType.tiRecordStatus = 1
Select @iLastStatusDropDownValueID = iDropDownValueID
From DropDownValue
Inner Join DropDownValueType On DropDownValue.iDropDownValueTypeID = DropDownValueType.iDropDownValueTypeID
Where DropDownValueType.vchDropDownValueTypeName = 'Status'
AND DropDownValue.vchDropDownValueName = 'CriticalErrorOccurred'
AND DropDownValue.tiRecordStatus = 1
And DropDownValueType.tiRecordStatus = 1
UPDATE語句:
Update Schedule
Set
iStatusDropDownValueID = @iStatusDropDownValueID,
iLastStatusDropDownValueID = @iLastStatusDropDownValueID,
iCurrentLogID = @iCurrentLogID,
dtNextDate = @dtNextDate,
dtLastDate = @dtLastDate,
iRetryCount = @iRetryCount,
iFailedCount = @iFailedCount,
iBusyRetryCount = @iBusyRetryCount,
vchUpdateBy = @vchUpdateBy,
dtUpdateDate = @dtLastDate
WHERE
iScheduleID = @iScheduleID
首先,由前兩個select語句檢索的值總是相同的。所以他們可以通過代碼本身傳入。我不知道這會加快速度,只是讓整個存儲過程更好,更易於閱讀。其次,如果「數值名稱」應該改變,這個存儲過程將會中斷(這是可能的,但不經常)。
我在尋找任何有關這種情況的最佳做法的見解。
你提出了一些我不知道你可以做的事情。太棒了!我看到使用函數的唯一問題是,如果名稱更改,函數仍然會中斷。 –
@Andy,爲什麼函數會中斷?只要在失敗時返回null,然後在函數中測試它。 – Johan
你是對的,他們不會失敗。我在想,如果價值因任何原因而改變。但在這種情況下,該值永遠不會改變下拉列表名稱。 –