2014-06-30 90 views
0

我有一個簡單的存儲過程,我在創建的表上執行。當我使用硬編碼參數自行執行更新語句時,它可以工作,但是該過程在執行時不會更新。它返回一個「命令成功完成」,但不影響行。我檢查數據,它也沒有改變。更新存儲過程不起作用

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
alter PROCEDURE uspUpdatePrices 
    @adjustment AS float, 
    @itemNumber AS VarChar 
AS 
BEGIN 
    UPDATE [NIMEH].[dbo].[TestIV00108] 
    SET UOMPRICE = @adjustment 
    WHERE RTRIM(ITEMNMBR) = @itemNumber 
END 
GO 
+3

操作定義的參數的長度。例如'@itemNumber AS VarChar(100)' –

+0

您發佈的查詢是**更改**過程 - 不是執行! 您確定您正在以正確的方式運行程序嗎? – hash

+0

那只是程序本身,而不是執行 – rigamonk

回答

0

由於在where子句中比較兩個字符串變量之間的值,請確保參數中的值與行中的值完全相同。

如果開始或結束時出現空白,則同時將ltrim和rtrim應用於列值。

另外指定varchar列的長度,因爲在sql server中默認長度是30,這可能導致溢出。

注 - 對上表列的操作使其無法搜索的索引,因此不能正常使用,這是更好地使該參數值