2011-12-21 11 views
0

私は100以上のカラムを使用して構築しているSQL Serverテーブルを持っています。私はUPDATE TABLE_NAMEクエリを実行してそのテーブルにデータを設定しています。ただし、使用可能なレコードがない場合は、NULLがレコードに挿入されます。これは、私が実行しなければならない計算を困難にします。テーブル全体からNULLを取得する

私はCREATE TABLE文でNOT NULLDEFAULT (0)でテーブルを作成しようとしたが、私が更新を実行すると、それはNULL値を挿入しようと、私はこのエラーを取得:

UPDATE文:

UPDATE TABLE_NAME 
SET NumOrders = (SELECT count(OrderID) FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID); 

Cannot insert the value NULL into column 'NumOrders', table 'TABLE_NAME'; column does not allow nulls. UPDATE fails.

私は、次のようなNULLSを除去するために第二更新クエリを実行することができ

UPDATE TABLE_NAME 
SET NumOrders = 0 
WHERE NumOrders IS NULL; 

これは、私が書かなければならない更新クエリを倍増させているようです。

これを行うには、より良い方法が必要です。

おかげ

+0

テーブルに100個以上の列がありますか? – slinzerthegod

+1

問題の原因となっている更新のスニペットを表示できますか? – Anon246

+1

100列?パフォーマンスの悪夢が起こるのを待っているように聞こえる - それはリファクタリングできないだろうか? – KingCronus

答えて

3
UPDATE TABLE_NAME 
SET NumOrders = isnull((SELECT count(OrderID) FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID),0); 

これはあなたのために機能しますか?

1
挿入ません更新に関する

デフォルトの制約のみ火災、あなたのための別のオプションは、nullではない何か

にNULLSを変更したり、アップデートで値を指定します更新トリガーを持つことですそれがヌルではなく実際の値であることを確認してください

+0

updateステートメントでヌルでないことを確認するには、更新ごとに 'CASE'を実行しますか?生のコードではなく、それを扱う機能はありますか? – mikebmassey

+1

値または変数/パラメータの周りにCOALESCE()またはISNULL()をラップします。 – SQLMenace

0

UPDATE TABLE_NAME SET NumOrders = COALESCE((SELECT count(OrderID)FROM ORDERS WHERE TABLE_NAME.CUSTOMER_ID = ORDERS.CUSTOMER_ID)、0);

関連する問題