我有以下存儲過程,但它沒有返回正確的值。我測試了一些東西,看起來像%是它無法正常工作的原因。儘管在數據庫中ID
是Int
,但是由於%
,程序一直保持失敗,直到我將IDOld
更改爲VARCHAR
。存儲過程無法正常工作
我在SQL中測試了這個語句,它只返回正確的值,存儲過程返回了錯誤的值。另外,我在like之後插入'1'來測試它,即使它存在於數據庫中,它仍然無法找到值。所以不知道如何使其正常工作。
我得到舊的ID並刪除第一個數字,並試圖找到與舊ID相同但沒有第一個數字的ID,例如IDOld = 5623826,IDOld = 623826比它應該返回的值IDOld。在數據庫中有更多的ID的變體,如1623826,2623826,...但我想要最後更新的值,因此使用Max。
ALTER PROCEDURE dbo.UP_getLastUsedIDFromProducts
(
@IDOld VARCHAR,
@IDLastUpdated INT OUTPUT,
)
AS
SELECT @IDLastUpdated = MAX(ID)
FROM Products
WHERE ID LIKE '%' + @IDOld
SqlCommand cmd = new SqlCommand("UP_getLastUsedIDFromProducts");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@IDOld", SqlDbType.VarChar).Value = tbOriginalID.Text;
cmd.Parameters.Add("@IDLastUpdated", SqlDbType.Int).Direction = ParameterDirection.Output;
首先:你** CAN NOT **使用'對抗'INT'列LIKE'!其次:如果你定義一個參數爲'VARCHAR'而不指定長度**;那麼你得到一個長**的** VARCHAR **(通常**不是**你想要的!) –
@marc_s我現在明白了。我只是設置了VARCHAR的長度,現在它返回了正確的值。 TY – user2994144
您需要在'WHERE'子句中將'ID'轉換爲'VARCHAR(9)'。當然,它可能會運行緩慢,我對這個查詢的智慧和實用性有嚴重的懷疑... – RBarryYoung