13

SAMPLEテーブルにはIDtype の列が 1 つだけありint、デフォルトは null です。

オラクルで私がするとき:

  insert into SAMPLE (ID) values ('');

新しいレコードは空白の値で追加されます。しかし、SQL Server 2008 で同じinsertステートメントを実行すると、新しいレコードの値は 0 になります。

SQL Server 2008 のデフォルトの空白文字列を 0 ではなく NULL にする方法はありますか (列の数値型の場合)。

4

5 に答える 5

7

INSERT ステートメントが、アプリケーションの多くの場所で再利用されるストアド プロシージャの一部であり (または、クライアント コードの同じ部分によって常に構築されるバッチである可能性があります)、挿入される値が として渡される数値であると仮定します。文字列引数の場合、次のように INSERT を変更できます。

INSERT INTO SAMPLE (ID) VALUES (NULLIF(@argument, ''));
于 2012-11-02T11:03:07.907 に答える
6

代わりに NULL を使用してください。

insert into SAMPLE (ID) values (NULL);
于 2012-11-02T05:18:29.477 に答える
4

別のアイデアはどうですか - INSTEAD OF INSERT Triggerを定義します。

文字列を挿入しようとしているという事実にもかかわらず、これにより操作は「傍受」され、空の文字列は NULL に置き換えられ、挿入は成功します。

テーブルでこのトリガーを定義すると、他の変更を行わなくても、以前と同じように引き続き空の文字列を挿入できます。

編集: Martin Smith が指摘しているように、これは実質的に 0 (int としての空の文字列に相当) との比較であり、このテーブルに 0 を格納することはできません。あなたの状況に受け入れられる場合に備えて、この回答をここに残します-それか、すべてのクエリをやり直してください!

CREATE TRIGGER EmptyStringTrigger
ON [SAMPLE]
INSTEAD OF INSERT
AS
  BEGIN
      INSERT INTO [SAMPLE](ID)
      SELECT CASE
               WHEN ID = '' THEN NULL
               ELSE ID
             END
      FROM   inserted
  END

SQL フィドルの例

于 2012-11-02T08:31:57.573 に答える
0

「文字列」を int 列に挿入することはできません。オラクルはあなたのためにそれを処理しているに違いありません。

それが必要な場合は、NULL を挿入してみてください。

insert into SAMPLE (ID) values (NULL);
于 2012-11-02T05:18:38.170 に答える
0

もう1つのオプション

insert into SAMPLE (ID) values (DEFAULT)
于 2012-11-02T08:15:16.893 に答える