SYBASE程式設計中的莫名錯誤及其解決辦法 (轉)
SYBASE程式設計中的莫名錯誤及其解決辦法 (轉)[@more@]
01-5-25 下午 03:13:29
SYBASE 是當今在環境下最為流行的大型資料庫之一,本人在SYBASE下開發和維護的過程中,發現了一些SYBASE的內部規則,在設計中極易造成誤解,而達不到預期的目的。下文將本人所發現的幾個問題及其解決辦法敘述如下: 1、在sybase11.5中,組合兩個定長的 char(x)="aaa",char (y)="bbb"; char(x)+char(y)!="aaabbb" declare @val_1 char(8) declare @val_2 char(1) @val_2 = 'x' select @val_1 = "0000" select @var_1= @val_1 + @val_2 select @var_1 我們期望的結果為0000x, 而實際上其結果為0000。 解決方法一:當我們將"select @var_1=@val_1+@val_2",改為"select @var_1=rtrim(@var_1)+@var_2"時,我們便看到了我們所期望的結果。為什麼呢?在有的SYBASE版本中一個char(n)時,在其真實值後補上了相應數量的空格,在本例中,儲存在@var_1中的是0000 (在0000後有四個空格)。你可以加上如下兩句來驗證: declare @val3 char(10) select @val3 = @val_1 + @val_2 select @val3 這時你會得到的結果為0000 x (在0000後有四個空格) 解決方法二:將char 改為 varchar 也可以達到預期的目的。 2、用alter table 增加表結構時,雖然用sp_recompile tablename 重編譯了所影響的資料庫,但在執行某些包含"select * from tablename"的時,儲存程式仍不認識用alter table 增加的列。例: 1> create table tmp(aa int,bb int) 2> go 1> create table b_tmp(aa int,bb int) 2>go 1> create proc tmpstore 2> as 1> insert b_tmp select * from tmp 2> return 3> go 1> alter table tmp add cc char(8) null 2> go 1> alter table b_tmp add cc char(8) null 2> go 1> sp_recompile tmp 2> go 1>insert tmp values(12,1234,"abcdefg") 2>go 1> exec tmpstore 2> go 1> select * from b_tmp 2> go aa??????bb??????cc ----------- ------------- ------------- 12??????1234?????NULL 為什麼cc欄位是NULL,而不是"abcdefg"? 用alter table 增加表結構後,包含"select * from tablename"的儲存過程,用sp_recompile tablename 重編譯仍不能使新增的列被儲存過程所識別。解決辦法只有一個:刪了重建。
中的莫名錯誤及其解決辦法
01-5-25 下午 03:13:29
SYBASE 是當今在環境下最為流行的大型資料庫之一,本人在SYBASE下開發和維護的過程中,發現了一些SYBASE的內部規則,在設計中極易造成誤解,而達不到預期的目的。下文將本人所發現的幾個問題及其解決辦法敘述如下: 1、在sybase11.5中,組合兩個定長的 char(x)="aaa",char (y)="bbb"; char(x)+char(y)!="aaabbb" declare @val_1 char(8) declare @val_2 char(1) @val_2 = 'x' select @val_1 = "0000" select @var_1= @val_1 + @val_2 select @var_1 我們期望的結果為0000x, 而實際上其結果為0000。 解決方法一:當我們將"select @var_1=@val_1+@val_2",改為"select @var_1=rtrim(@var_1)+@var_2"時,我們便看到了我們所期望的結果。為什麼呢?在有的SYBASE版本中一個char(n)時,在其真實值後補上了相應數量的空格,在本例中,儲存在@var_1中的是0000 (在0000後有四個空格)。你可以加上如下兩句來驗證: declare @val3 char(10) select @val3 = @val_1 + @val_2 select @val3 這時你會得到的結果為0000 x (在0000後有四個空格) 解決方法二:將char 改為 varchar 也可以達到預期的目的。 2、用alter table 增加表結構時,雖然用sp_recompile tablename 重編譯了所影響的資料庫,但在執行某些包含"select * from tablename"的時,儲存程式仍不認識用alter table 增加的列。例: 1> create table tmp(aa int,bb int) 2> go 1> create table b_tmp(aa int,bb int) 2>go 1> create proc tmpstore 2> as 1> insert b_tmp select * from tmp 2> return 3> go 1> alter table tmp add cc char(8) null 2> go 1> alter table b_tmp add cc char(8) null 2> go 1> sp_recompile tmp 2> go 1>insert tmp values(12,1234,"abcdefg") 2>go 1> exec tmpstore 2> go 1> select * from b_tmp 2> go aa??????bb??????cc ----------- ------------- ------------- 12??????1234?????NULL 為什麼cc欄位是NULL,而不是"abcdefg"? 用alter table 增加表結構後,包含"select * from tablename"的儲存過程,用sp_recompile tablename 重編譯仍不能使新增的列被儲存過程所識別。解決辦法只有一個:刪了重建。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989724/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 畢設之錯誤解決辦法
- dns錯誤怎麼辦 dns錯誤的解決辦法DNS
- VPN連線800錯誤的解決辦法(轉)
- 轉: redhat linux ftp 553 錯誤的解決辦法RedhatLinuxFTP
- ORA-01034錯誤的解決辦法[轉]
- SAP錯誤提示解決辦法
- Session莫名丟失的原因及解決辦法Session
- CentOS 中yum命令執行錯誤解決辦法CentOS
- scp出現錯誤的解決辦法
- samba一個錯誤的解決辦法!Samba
- 連線oracle錯誤解決辦法Oracle
- nginxFastCGI錯誤Primaryscriptunknown解決辦法NginxAST
- Unable to locate package錯誤解決辦法Package
- oracle 1455 錯誤解決辦法Oracle
- unknown software exception應用程式錯誤的解決辦法Exception
- virtualbox中Cannot register the hard disk錯誤解決辦法
- 常見的80004005錯誤及其解決方法 (轉)
- iOS路上遇到的錯誤及解決辦法iOS
- ORA-12705,錯誤的解決辦法
- SPFILE引數修改錯誤的解決辦法
- ORA-12170錯誤的解決辦法
- Idea編譯錯誤解決辦法Idea編譯
- PHP編譯錯誤及解決辦法PHP編譯
- ORA-29339錯誤解決辦法
- ORA-54013錯誤解決辦法
- IIS中“未將物件引用設定到物件的例項”錯誤解決辦法物件
- 開機checking file錯誤的解決辦法
- ORA-01034錯誤的解決辦法
- 安裝wsl錯誤的一種解決辦法
- .Net“/”應用程式中的伺服器錯誤 超過了最大請求長度 錯誤解決辦法伺服器
- 網頁上有錯誤怎麼辦 網頁錯誤的一般解決辦法網頁
- 【Tensorflow_DL_Note17】CIFAR10程式碼使用過程中出現的錯誤及其解決辦法
- ubuntu下import matplotlib錯誤解決辦法UbuntuImport
- OpenCV1.0編譯錯誤解決辦法OpenCV編譯
- Xamarin提示安裝包錯誤解決辦法
- ORA-32004錯誤解決辦法
- ORA-01846錯誤解決辦法
- Mysql出現連線錯誤解決辦法MySql