国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

Sybase程序設(shè)計(jì)中極易造成誤解的內(nèi)部規(guī)則

2024-07-21 02:43:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
SYBASE 數(shù)據(jù)庫(kù)是當(dāng)今在UNIX環(huán)境下最為流行的大型數(shù)據(jù)庫(kù)之一,本人在SYBASE下開(kāi)發(fā)和維護(hù)軟件的過(guò)程中,發(fā)現(xiàn)了一些SYBASE的內(nèi)部規(guī)則,在程序設(shè)計(jì)中極易造成誤解,而達(dá)不到預(yù)期的目的。下文將本人所發(fā)現(xiàn)的幾個(gè)問(wèn)題及其解決辦法敘述如下:

◆1、在sybase11.5中,組合兩個(gè)定長(zhǎng)的 char(x)="aaa",char (y)="bbb"; char(x)+char(y)!="aaabbb"

declare @val_1 char(8)

declare @val_2 char(1)

select @val_2 = 'x'

select @val_1 = "0000"

select @var_1= @val_1 + @val_2

select @var_1

我們期望的結(jié)果為0000x, 而實(shí)際上其結(jié)果為0000。

解決方法一:當(dāng)我們將"select @var_1=@val_1+@val_2",改為"select @var_1=rtrim(@var_1)+@var_2"時(shí),我們便看到了我們所期望的結(jié)果。為什么呢?在有的SYBASE版本中存儲(chǔ)一個(gè)char(n)時(shí),在其真實(shí)值后補(bǔ)上了相應(yīng)數(shù)量的空格,在本例中,存儲(chǔ)在@var_1中的是0000 (在0000后有四個(gè)空格)。你可以加上如下兩句來(lái)驗(yàn)證:

declare @val3 char(10)

select @val3 = @val_1 + @val_2

select @val3

這時(shí)你會(huì)得到的結(jié)果為0000 x (在0000后有四個(gè)空格)。

解決方法二:將char 改為 varchar 也可以達(dá)到預(yù)期的目的。

◆2、用alter table 增加表結(jié)構(gòu)時(shí),雖然用sp_recompile tablename 重編譯了所影響的數(shù)據(jù)庫(kù)對(duì)象,但在運(yùn)行某些包含"select * from tablename"的存儲(chǔ)過(guò)程時(shí),存儲(chǔ)進(jìn)程仍不認(rèn)識(shí)用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 增加表結(jié)構(gòu)后,包含"select * from tablename"的存儲(chǔ)過(guò)程,用sp_recompile tablename 重編譯仍不能使新增的列被存儲(chǔ)過(guò)程所識(shí)別。解決辦法只有一個(gè):刪了重建。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀化市| 文昌市| 固安县| 射洪县| 明星| 浏阳市| 昔阳县| 宜良县| 谷城县| 岱山县| 正阳县| 大关县| 香格里拉县| 读书| 南溪县| 平塘县| 广安市| 海兴县| 武功县| 平顶山市| 北辰区| 都江堰市| 陕西省| 长沙县| 徐汇区| 留坝县| 华蓥市| 衡东县| 安溪县| 沅陵县| 驻马店市| 泉州市| 获嘉县| 沙洋县| 繁昌县| 黎城县| 临沭县| 札达县| 维西| 石家庄市| 徐汇区|