2008-12-03 46 views
3

由於奇怪的請求,如果沒有值,我不能將null放在數據庫中。我在想什麼,我可以在商店程序中放置什麼,而不是nullTSQL:沒有值而不是空

例如:

insert into blah (blah1) values (null) 

有什麼像什麼或爲空 「blah1」,而不是使用null

+0

不要低估這一點;這是RL與真實用戶經常遇到的問題。 – dkretz 2008-12-03 21:29:44

+0

什麼是表格定義?什麼是錯誤信息? – devio 2008-12-03 21:15:29

回答

5

我會推回這個奇怪的請求。這正是NULL在SQL中的用途,表示列中缺少或不適用的值。

請求者是否對SQL邏輯感到悲傷NULL

編輯:好吧,我讀過有關這個工作分配(順便說一句,通常你應該修改你原來的問題,而不是在回答中發佈更多信息)的額外的細節您的回覆。

您必須聲明所有列爲NOT NULL,並在該列數據類型的域中指定一個特殊值來表示「無值」。根據具體情況選擇適當的值可能會有所不同,即零可能不代表person_age列中的任何內容,但它可能在列中有意義。

您應該記錄每列的無值。但我想他們也不相信文件。 :-(

+0

我同意。這是奇怪的要求。他們使用Access for DB,所以我想這是告訴你一些事情。我正在工作的那個人告訴我他們在數據庫中討厭null。他們更喜歡它是什麼,但不是什麼基本上是空的? – Jack 2008-12-03 21:21:25

0

IS NULL是無論你存儲?

  • 使用像INT32.MaxValue,空字符串,或「XXXXXXXXXX」哨兵值,並假設它永遠不會成爲一個合法有效的值值
  • 添加位列「存在」,你與真正的填充,同時您插入

編輯:但是,是的,我會用其他的答案,試圖改變的要求達成一致可能比嘗試更好問題不大。

1

取決於列的數據類型。對於數字(整數等)它可能是零(0),但如果varchar那麼它可以是一個空字符串(「」)。

我同意NULL最適合這個的其他答案,因爲它超越了所有表示沒有值的數據類型。因此,零字符串和空字符串可能會成爲解決方法/破解,但它們本質上仍然是實際值,它們可能具有除「不是值」之外的業務領域含義。

(如果只有SQL語言支持a "Not Applicable" (N/A) value type that would serve as an alternative to NULL ...)

0

如果您使用的是VARCHAR或等效場,然後用空字符串。

如果您使用的是數字字段,例如int,那麼您將不得不強制用戶輸入數據,否則會出現一個表示NULL的值。

我不羨慕你的情況。

0

NULL作爲分配的值(例如插入到列中)和NULL作爲SQL工件(對於OUTER JOIN的缺失記錄中的字段有區別),這可能是這些用戶的外部概念。很多人使用Access或任何數據庫,只是爲了維護單表列表。)如果幼稚的用戶更喜歡使用替代方法來分配任務,我不會感到驚訝;雖然令人反感,但它應該可以正常工作。只要讓他們使用任何他們想要的。

0

要求不使用NULL值有一些有效性。當它們位於將包含在JOIN或WHERE子句中的字段中或將被聚合的字段中時,NULL值可能會導致很多頭痛。

某些SQL實現(例如MSSQL)不允許將NULLable字段包含在索引中。

當NULL被評估爲相等時,MSSQL尤其會以意想不到的方式運行。當我們搜索最新的記錄時,PaymentDue字段中的NULL值是否等於零?如果我們在一張桌子上有名字而有人沒有中間名,該怎麼辦?可以想象,可以存儲空字符串或NULL,但是我們如何獲得一個沒有中間名的人的全面列表?

一般來說,我寧願避免NULL值。如果使用數字(包括零)或字符串(包括前面提到的空字符串)無法表示要存儲的內容,則應該仔細觀察要存儲的內容。也許你正試圖在一個領域傳達不止一個數據。