13

一个SAMPLE表只有一列IDtype int,默认为 null。

当我这样做时,在 Oracle 中:

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

新记录添加了空白值。但在 SQL Server 2008 中,当我运行相同的insert语句时,新记录的值为 0。

有没有办法强制 SQL Server 2008 默认空白字符串为 NULL 而不是 0(对于数字类型的列)?

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 触发器

尽管您试图插入一个字符串,但操作被“拦截”,空字符串被 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

另一种选择

insert into SAMPLE (ID) values (DEFAULT)
于 2012-11-02T08:15:16.893 回答
0

您不能将“字符串”插入 int 列。甲骨文一定只是为您处理。

如果这是您需要的,请尝试插入 NULL 。

insert into SAMPLE (ID) values (NULL);
于 2012-11-02T05:18:38.170 回答