2012-01-19 17 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命令不会反复更改您的更新查询。它必须是特定于代码或其他用户的东西。 –