Sql server 为什么9+;1=*,我如何修复它?
我的数据库有问题,因为它进行了审计,而且事情很困难。我需要将当前更改与上一次更改进行比较,因此我认为应该包括一个分组列。但是当我运行我的代码时,一些列值被忽略了。它是1,2,3,4,5,6,7,8,9。什么是。。。我不知道 这就是我正在做的: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
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的字符串插入其中。我刚刚意识到您是对的!这就是问题所在。谢谢