2012-01-19 45 views
0

在所有更新字段爲nvarchar(50)的表上運行簡單更新查詢時,我注意到了奇怪的行爲。有時候(什麼是第一個奇怪的東西)而不是正確更新值,我得到了一些看起來像是計算結果的東西。當我再次運行相同的查詢時,結果就像我期望它們在那裏一樣。 任何人都看過它,知道這個解決方案嗎? 請看例子:更新nvarchar導致無窮大或其他未知值

Query: 
UPDATE Tabl1 
SET [D1] = '43/57.43 %', [D2] = '20/41.18 %', [D3] = '145/27.50 %', 
    [D4] = '59/28.92 %', [D5] = '143/36.44 %', [D6] = '14/53.33 %', 
    [D7] = '0/0.00 %', [D8] = '424/37.00 %',[D9] = '0/0.00 %' 
WHERE [key] = 28 

Result: 
D1 = 100 
D2 = 100 
D3 = 100 
D4 = Infinity 
D5 = 41.67 
D6 = 100 
D7 = 100 
D8 = Infinity 
D9 = Infinity 

預先感謝任何幫助。

+5

向我們展示一些真實的代碼。您現在顯示的查詢/結果顯然不相關,因爲查詢的結果應該是'1 row updated',並且沒有結果集。 –

+0

您正在分配字符串值。它不應該被評估爲一個表達式。如果該列是數字,則會出現錯誤。另外,我假設SQL Server因爲[]。 – gbn

+0

Damiel_The_Unbelieber - 第一部分是我使用的真實查詢。你問的結果是「(1行受影響)」。上面運行查詢後,我在數據庫中顯示了確切的結果。 gbn - 我同意,它不認爲它是一個表達。該列是nvarchar(50),我正在傳遞一個字符串。正確的假設,這是SQL Server 2008,如果它有任何區別。 –

回答

3

這不是來自SQL Server。

SQL Server沒有這樣的邏輯來評估計算並返回字符串,如「Infinity」。

您必須在執行此重寫的表上執行觸發器,或者您使用提交查詢的任何內容重寫它。

+0

_Martin_,我上面提到的查詢是傳遞給SqlCommand並使用funciton Executenonquery執行的查詢。如果在此期間有任何事情可以改變,我會加倍檢查,但必須以這種方式執行。也許我應該改寫這些問題,並詢問VB SqlCommand類是否可以做這樣的事情。在數據庫端,我檢查了觸發器正在做什麼,並以[key]爲參數運行另一個存儲過程。 SP用於重新計算表中的值,並且此表的更新在5個位置完成,並且它們都不會影響我嘗試更新的值。 –

+0

@Lucas_Kul - 編號VB SQL命令不會反覆更改您的更新查詢。它必須是特定於代碼或其他用戶的東西。 –