2014-10-16 70 views
1

我遇到了數據庫問題,因爲它的審計工作起來很麻煩。我需要比較當前的變化和最後的變化,所以我想我會包括一個分組列。但是當我運行我的代碼時,某些列值是。它依次爲1,2,3,4,5,6,7,8,9,。什麼... idon'tevenknow?爲什麼9 + 1 = *,我該如何解決?

這是我在做什麼:

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 @[email protected]) 
     SET @[email protected]+1; 
    UPDATE MyTable SET [email protected] WHERE [email protected] AND [email protected]; 
    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符號*爲整數。 爲什麼我會得到一個星號?我該如何解決它?

+4

更改組似乎是'char(1)'或類似的,並且您正在插入一個長度爲2的字符串。 – 2014-10-16 22:16:05

+1

我剛剛意識到你是對的!那就是問題所在。謝謝! – 2014-10-16 22:17:26

回答

1

您所遇到的問題described here

當整數隱式轉換爲字符數據類型,如果 整數是太大,無法進入字符型字段,SQL服務器 進入ASCII字符42,星號(*)。

從中我推斷出您的專欄必須是[var]char(1)。對於較新的n [var]字符類型as discussed here,這種奇怪的行爲不會發生。

修復方法是更改​​列數據類型。理想情況下,數字數據類型如int,但如果它必須是字符串至少有足夠長的時間來保存預期的內容。

相關問題