甲SAMPLE
表只有一个列ID
类型的int
,默认为空。
在Oracle中,当我做:
insert into SAMPLE (ID) values ('');
新的记录添加空白值。 但在SQL Server 2008中,当我运行相同的insert
语句时,新纪录为0的值。
有没有办法强制SQL Server 2008中默认空字符串为NULL,而不是0(对于数值型列)?
甲SAMPLE
表只有一个列ID
类型的int
,默认为空。
在Oracle中,当我做:
insert into SAMPLE (ID) values ('');
新的记录添加空白值。 但在SQL Server 2008中,当我运行相同的insert
语句时,新纪录为0的值。
有没有办法强制SQL Server 2008中默认空字符串为NULL,而不是0(对于数值型列)?
使用NULL来代替。
insert into SAMPLE (ID) values (NULL);
在应用程序中的许多地方(或者,也许,永远是由客户端代码的同一部分构建一批)假设你的INSERT语句是存储过程的一部分重新使用和插入的值是一个通过多项字符串参数,你可以修改这样的INSERT:
INSERT INTO SAMPLE (ID) VALUES (NULLIF(@argument, ''));
如何另一个想法-定义一个INSTEAD OF INSERT触发器 。
尽管你想插入一个字符串,这种操作被“截获”,空字符串被替换NULL,插入成功。
如果你对你的表定义该触发器,那么你就可以继续插入空字符串和以前一样,没有其他变化。
编辑:正如马丁·史密斯指出,这实际上是意味着你将无法保存0在此表中的对比为0(空字符串相当于作为int)。 我离开这里的情况下,这个答案是可以接受的您的情况 - 要么或重新做您所有的疑问!
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例如拨弄
你不能插入“串”为INT列。 甲骨文必须公正处理,对你。
刚刚尝试插入NULL如果这就是你所需要的。
insert into SAMPLE (ID) values (NULL);
还有一个选项
insert into SAMPLE (ID) values (DEFAULT)