Sql server 为什么9+;1=*,我如何修复它?

Sql server 为什么9+;1=*,我如何修复它?,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我的数据库有问题,因为它进行了审计,而且事情很困难。我需要将当前更改与上一次更改进行比较,因此我认为应该包括一个分组列。但是当我运行我的代码时,一些列值被忽略了。它是1,2,3,4,5,6,7,8,9。什么是。。。我不知道 这就是我正在做的: DECLARE @Person char(11), @DonationYTD decimal(10, 2), @OldPerson char(11), @OldDonationYTD decimal(10, 2), @Group int; SET @Gro

我的数据库有问题,因为它进行了审计,而且事情很困难。我需要将当前更改与上一次更改进行比较,因此我认为应该包括一个分组列。但是当我运行我的代码时,一些列值被忽略了。它是1,2,3,4,5,6,7,8,9。什么是。。。我不知道

这就是我正在做的:

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 symbol*转换为整数。
为什么我会得到一个星号?我如何修复它?

您遇到了这个问题

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

从中我推断您的列必须是
[var]char(1)
。新的n[var]字符类型不会出现这种奇怪的行为


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

更改组似乎是一个
char(1)
或类似的字符串,您正在将一个长度为2的字符串插入其中。我刚刚意识到您是对的!这就是问题所在。谢谢