2010-05-13 23 views
0

在我當前的項目中,從域中排除空字符串會很方便,所以這是一個空字符串,無論在哪裏,都會被視爲NULL,例如,如果我更新[table] SET [Something] ='', SQL Server應將其視爲SET [Something] = NULL,以便在下一個SELECT中將NULL返回爲[Something]值。我可以配置SQL Server 2008數據庫,以便將所有空字符串保存爲NULL嗎?

我應該使用觸發器還是有更好的方法?

+0

該表是如何填充的? Web應用程序?一次文件加載? – 2010-05-13 02:20:51

回答

1

沒有自動方法強制將空字符串轉換爲空值。但是,您可以在所有char,varchar,nchar和nvarchar列上添加檢查約束,這要求該值大於零或空。這會導致客戶端應用程序在未將空字符串轉換爲空值時拋出異常。

除了使用檢查約束之外,確保將空字符串轉換爲NULL的理想位置是您的數據訪問層。您應該封裝打開連接的代碼,對數據庫執行某些操作,然後關閉連接。據推測,該代碼將採用參數數組作爲參數化查詢的參數。在該代碼中,它可以檢查數據類型是否是字符串,如果是,則將其轉換爲空值。

1

值得注意的是,NULL並不總是與空字符串一樣的東西(即使今天是這樣,明天它可能會讓某人刪除空字符串而感到困惑)。例如,這兩種情況是否相同:

  1. 用戶還沒有向該字段輸入數據;
  2. 用戶輸入並刪除了數據?

在強制所有空字符串爲NULL之前,您應該考慮知道該字段是否有值,是否有價值。另外 - 單個空格是否爲空字符串?多個空間? CHR(254)?

+1

「NULL並不總是與空字符串相同的東西」 - 我明白,但在大多數情況下,我遇到的值是未知/不適用或非空。我很難想象一個空字符串可以使真實世界有意義的情況。 – Ivan 2011-06-18 00:15:07

0

我希望。所有插入和更新表達式都需要正確處理。

我有幾種語言的功能,我用它來正確構建字符串表達式。在PHP它的

function QuoteOrNull($str) 
{ 
    return empty($str) ? "NULL" : "'$str'" ; 
} 

還有另外一個整數值:

function IntOrNull($num) 
{ 
    return is_null($num) ? "NULL" : intval($num); 
} 

所有關於確保您的業務規則是零和空應用之間進行正確區分平時的告誡第二。我從來沒有見過有意插入零長度字符串的有用理由。看起來當你這樣做時,有人想要對他們進行排序,然後你就會陷入困境。

相關問題