全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:821
推到 Plurk!
推到 Facebook!

SQL2000 'S CHECK 问题

尚未結案
dnsxc
一般會員


發表:7
回覆:13
積分:4
註冊:2004-05-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-25 14:37:39 IP:222.65.xxx.xxx 未訂閱
DEAR ALL: I CREATE A TABLE,IT IS: CREATE TABLE [dbo].[checker] ( [chk_no] [char] (4) COLLATE Chinese_PRC_CI_AS NOT NULL , [chk_nm] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [oil] [bit] NULL , [valve] [bit] NULL , [kdyy] [bit] NULL , [ldbz] [bit] NULL , [fldz] [bit] NULL , [jdzl] [bit] NULL , [djzl] [bit] NULL , [kdzl] [bit] NULL , [ldsy] [bit] NULL , [yjbz] [bit] NULL , [ngyc] [bit] NULL , [hjz] [bit] NULL , [jjz] [bit] NULL , [qxz] [bit] NULL , [psz] [bit] NULL , [sta_dt] [smalldatetime] NOT NULL , [end_dt] [smalldatetime] NULL ) ON [PRIMARY] 我想建一个CHECK,使数据类型为[BIT]的所有字段中至少有一个字段值为‘TRUE’,现向高人求教。
huwk
資深會員


發表:26
回覆:340
積分:323
註冊:2002-04-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-06 01:44:54 IP:211.76.xxx.xxx 未訂閱
ALTER TABLE CHECKER
ADD CONSTRAINT CHECKER_HAVE1 CHECK
(
     (oil = 1) 
  OR (VALVE =1)
  OR (KDYY = 1)
  .
  .
  OR (PSZ =1)
)
 
------
熊的學習 http://huwk.blogspot.com
dnsxc
一般會員


發表:7
回覆:13
積分:4
註冊:2004-05-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-06 08:16:30 IP:222.65.xxx.xxx 未訂閱
huwk: 非常谢谢你! 你的方法我开始做TABLE时已经试过,不能达到要求。它没有启到CHECK的作用,因所有‘BIT’字段都没有被赋值时,SQL SERVER 不会跳出错误信息。 SQL SERVER 尚未找到实现的方法,我目前只用编写程序控制。但其不能随意改动,而且繁琐。 再次谢谢你!
huwk
資深會員


發表:26
回覆:340
積分:323
註冊:2002-04-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-06 13:01:50 IP:61.222.xxx.xxx 未訂閱
引言: huwk: 非常谢谢你! 你的方法我开始做TABLE时已经试过,不能达到要求。它没有启到CHECK的作用,因所有‘BIT’字段都没有被赋值时,SQL SERVER 不会跳出错误信息。 SQL SERVER 尚未找到实现的方法,我目前只用编写程序控制。但其不能随意改动,而且繁琐。 再次谢谢你!
check應不管該櫚位有沒有被更動到..都會檢查才是~~ 我晚點實際去sql server試試看好了!
------
熊的學習 http://huwk.blogspot.com
wscken
初階會員


發表:28
回覆:75
積分:45
註冊:2003-08-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-07 11:32:27 IP:210.243.xxx.xxx 未訂閱
dnsxc: huwk大大說的沒錯 我把資料表改成只有chk_no, ngyc, hjz, jjz四各欄位 只使用 ALTER TABLE CHECKER ADD CONSTRAINT CHECKER_HAVE1 CHECK ( (ngyc = 1) OR (hjz =1) OR (jjz = 1) ) 當同時寫入0時,會有錯誤訊息產生 伺服器: 訊息 547,層級 16,狀態 1,行 1 INSERT 陳述式與 TABLE CHECK 條件約束 'CHECKER_HAVE1' 發生衝突。衝突發生於資料庫 'Test',資料表 'checker'。 陳述式已經結束。 您的情況應該不是資料庫上的問題,應該是別的狀況影響的吧..
dnsxc
一般會員


發表:7
回覆:13
積分:4
註冊:2004-05-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-09 08:15:44 IP:222.65.xxx.xxx 未訂閱
wscken: 你好!我用的是SQL SERVER 2000,不知你用的是什么数据库。我用INSERT数据时,没有错误信息跳出。我用的语句是: insert checker (chk_no,chk_nm,sta_dt) values ('ww','sfdag','2004-07-09 00:00:00') 不知为何? 谢谢你!
wuabc
初階會員


發表:6
回覆:60
積分:33
註冊:2002-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-16 02:18:33 IP:203.204.xxx.xxx 未訂閱
引言: wscken: 你好!我用的是SQL SERVER 2000,不知你用的是什么数据库。我用INSERT数据时,没有错误信息跳出。我用的语句是: insert checker (chk_no,chk_nm,sta_dt) values ('ww','sfdag','2004-07-09 00:00:00') 不知为何? 谢谢你!
bit的null值好像是視同1,當你不assign值時,它已經是1了, 因此,如果要得到正確結果的話,恐怕是要指定預設值了, ex: valve bit default 0 , and so on ...
dnsxc
一般會員


發表:7
回覆:13
積分:4
註冊:2004-05-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-16 16:22:37 IP:218.82.xxx.xxx 未訂閱
wuabc: 谢谢你! 采用‘预设置0’是可行的。但“bit的null值好像是視同1,當你不assign值時,它已經是1了”是不可行的。若未有预设置,我希望BIT的FIELD至少有一个为0(FALSE),CHECK的内容为:VALVE=0 OR KDYY=0...。我用INSERT CHECKER (CHK_NO,CHK_NM) VALUES ('45','HKK')命令时,不会有错误信息跳出。不知哪位高人能给详解。 再次多谢! 發表人 - dnsxc 於 2004/07/16 16:24:38
wuabc
初階會員


發表:6
回覆:60
積分:33
註冊:2002-10-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-16 21:05:32 IP:203.204.xxx.xxx 未訂閱
引言: wuabc: 谢谢你! 采用‘预设置0’是可行的。但“bit的null值好像是視同1,當你不assign值時,它已經是1了”是不可行的。若未有预设置,我希望BIT的FIELD至少有一个为0(FALSE),CHECK的内容为:VALVE=0 OR KDYY=0...。我用INSERT CHECKER (CHK_NO,CHK_NM) VALUES ('45','HKK')命令时,不会有错误信息跳出。不知哪位高人能给详解。 再次多谢! 發表人 - dnsxc 於 2004/07/16 16:24:38
實際測試一下,果然null值會被忽略,不過加了測試not null 值就OK了 like as: (not VALVE IS NULL and VALVE = 0) or (not KDYY IS NULL and KDYY = 0)
dnsxc
一般會員


發表:7
回覆:13
積分:4
註冊:2004-05-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-17 08:11:52 IP:218.82.xxx.xxx 未訂閱
wuabc: 多谢!多谢! 问题最终解决了。问题的主要原因是‘NULL’值,‘NULL’处理好了,就没有问题了。 同时谢谢诸位给予的解答!
系統時間:2024-05-18 15:14:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!