SAMPLE
表只有一列ID
int
,默认为null。
在我做Oracle的时候:
insert into SAMPLE (ID) values ('');
新记录添加了空白值。但是在SQL Server 2008中,当我运行相同的insert
语句时,新记录的值为0.
有没有办法强制SQL Server 2008将空字符串默认为NULL而不是0(对于数字类型的列)?
答案 0 :(得分:6)
改为使用NULL。
insert into SAMPLE (ID) values (NULL);
答案 1 :(得分:5)
假设您的INSERT语句是在应用程序的许多位置重用的存储过程的一部分(或者,可能是批处理总是由客户端代码的相同部分构造)并且插入的值是一个数字作为字符串参数传递,您可以像这样修改INSERT:
INSERT INTO SAMPLE (ID) VALUES (NULLIF(@argument, ''));
答案 2 :(得分:3)
另一个想法怎么样 - 定义一个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
答案 3 :(得分:0)
您无法将“字符串”插入到int列中。 Oracle必须正好为您处理。
如果您需要,请尝试插入NULL。
insert into SAMPLE (ID) values (NULL);
答案 4 :(得分:0)
还有一个选择
insert into SAMPLE (ID) values (DEFAULT)