这可能更像是一个“最佳实践”问题,而不是真正的代码问题。在另一个存储过程中获取存储过程的参数。
我有一个存储过程来更新表,但需要从另一个表中的几个值。
前两个选项从表中获取值,然后用于更新语句中。
的选择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
你是对的,他们不会失败。我在想,如果价值因任何原因而改变。但在这种情况下,该值永远不会改变下拉列表名称。 –