SAMPLE
テーブルには、タイプID
の列int
が1つだけあり、デフォルトはnullです。
私が行うときのOracleでは:
insert into SAMPLE (ID) values ('');
新しいレコードは空白の値で追加されます。しかし、SQL Server 2008では、同じinsert
ステートメントを実行すると、新しいレコードの値が0になります。
SQL Server 2008でデフォルトの空白文字列を0ではなくNULLに強制する方法(数値型の列の場合)はありますか?
代わりにNULLを使用してください。
insert into SAMPLE (ID) values (NULL);
INSERTステートメントが、アプリケーションの多くの場所で再利用されるストアドプロシージャの一部である(または、おそらくクライアントコードの同じ部分によって常に構築されるバッチである)と想定し、挿入された値は、文字列引数の場合、INSERTを次のように変更できます。
INSERT INTO SAMPLE (ID) VALUES (NULLIF(@argument, ''));
別のアイデアはどうですか- 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
'string'をint列に挿入することはできません。オラクルはあなたのためにそれを処理しなければなりません。
必要な場合は、NULLを挿入してみてください。
insert into SAMPLE (ID) values (NULL);
もう1つのオプション
insert into SAMPLE (ID) values (DEFAULT)