为什么9 + 1 = *,我该如何解决?

时间:2014-10-16 22:13:21

标签: sql-server sql-server-2005

我的数据库出现问题,因为它的审计工作正在进行,而且事情很艰难。我需要将当前更改与上次更改进行比较,因此我认为我将包含一个分组列。但是当我运行我的代码时,一些列值是。它是1,2,3,4,5,6,7,8,9,。什么... idon'tevenknow?

这就是我正在做的事情:

DECLARE @Person char(11), @DonationYTD decimal(10, 2), @OldPerson char(11), @OldDonationYTD decimal(10, 2), @Group int;
SET @Group=1;
DECLARE TempCursor CURSOR FOR Select PersonID, DonationYTD FROM MyTable;
OPEN TempCursor;
FETCH NEXT FROM TempCursor INTO @Person,   @DonationYTD ;
WHILE @@FETCH_STATUS=0
BEGIN
    IF( @Person != @OldPerson)
        SET @Group=1;
    IF(  @Person = @OldPerson AND @DonationYTD!=@OldDonationYTD)
        SET @Group=@Group+1;
    UPDATE MyTable SET CHANGEGROUP=@Group WHERE PersonID=@Person AND DonationYTD=@DonationYTD;
    SET @OldPerson = @Person;
    SET @OldDonationYTD = @DonationYTD;
    FETCH NEXT FROM TempCursor INTO @Person,  @DonationYTD ;
END
CLOSE   TempCursor;
DEALLOCATE TempCursor;

SELECT PersonID, DonationYTD, Changegroup FROM MyTable

1   15.00   1
1   15.00   1
1   20.00   1
2   3.00    1
2   4.00    2
2   15.00   3
2   8.00    4
2   4.00    5
2   15.00   6
2   3.00    7
2   3.00    7
2   9.00    8
2   9.00    8
2   10.00   9
2   14.00   *
2   14.00   *

如果我尝试对Changegroup做任何事情,它会告诉我它无法将varchar符号*转换为整数。 我为什么要收到星号?我该如何解决?

1 个答案:

答案 0 :(得分:1)

您遇到问题described here

  

当整数被隐式转换为字符数据类型时,如果   整数太大,无法放入字符字段SQL Server   输入ASCII字符42,星号(*)。

我从中推断出您的专栏必须是[var]char(1)。对于较新的n [var] char类型as discussed here,不会发生这种奇怪的行为。

修复方法是更改​​列数据类型。理想情况下,对于int这样的数值数据类型,但如果它必须至少有一个字符串足够长,以容纳预期的内容。