位类型:默认为 '0' 而不是 NULL

29 浏览
0 Comments

位类型:默认为 '0' 而不是 NULL

默认情况下,SQL Server 为boolean字段分配NULL值。\n我该如何告诉它使用\'0\'作为默认值?\n我尝试将默认值设置为((0)),但它仍然保持为NULL。

0
0 Comments

在上述内容中,出现了一个问题:当在SQL Server中创建一个表,并在表中定义一个BIT类型的列时,默认情况下该列会被设置为NULL,而不是0。这导致在插入新行之前,这些列的默认值显示为NULL,而不是预期的0。下面是该问题的原因和解决方法:

原因:

问题的根本原因是SQL Server默认将BIT类型的列设置为NULL,而不是0。

解决方法:

1. 指定默认值:在创建表时,可以通过添加CONSTRAINT约束来指定BIT类型列的默认值。例如,在创建表时,可以使用以下语句指定BIT_COLUMN列的默认值为0:

CREATE TABLE TBL_SAMPLE
(
    ID INT NOT NULL CONSTRAINT [PK_ID] PRIMARY KEY,
    BIT_COLUMN BIT NOT NULL CONSTRAINT [DF_BIT_COLUMN] DEFAULT (0)
)

2. 使用ALTER TABLE语句:如果已经创建了表,并且需要将BIT类型列的默认值更改为0,可以使用ALTER TABLE语句来添加默认值约束。例如,可以使用以下语句将BIT_COLUMN列的默认值更改为0:

ALTER TABLE TBL_SAMPLE ADD CONSTRAINT [DF_BIT_COLUMN] DEFAULT (0) FOR BIT_COLUMN

通过上述方法,可以解决BIT类型列默认值为NULL的问题,并将其设置为0。这样,在插入新行之前,这些列的默认值将显示为0,而不是NULL。

0
0 Comments

问题出现的原因是在表定义或插入语句中可能存在其他问题。

解决方法是检查表定义和插入语句,确保没有其他问题。另外,可以尝试使用以下方法解决该问题:

1. 确保在表定义中正确指定了默认值为0:

ALTER TABLE [表名] ADD [列名] BIT NOT NULL DEFAULT 0;

2. 检查插入语句,确保在插入新记录时没有指定为NULL:

INSERT INTO [表名] ([列名1], [列名2], ...) VALUES (值1, 值2, ...);

3. 如果仍然出现问题,可以尝试使用触发器来强制设置默认值为0:

   CREATE TRIGGER [触发器名] ON [表名]
   INSTEAD OF INSERT
   AS
   BEGIN
       SET NOCOUNT ON;
       INSERT INTO [表名] ([列名1], [列名2], ...)
       SELECT ISNULL([列名1], 0), ISNULL([列名2], 0), ...
       FROM inserted;
   END;
   

通过检查表定义和插入语句,以及使用触发器来强制设置默认值为0,可以解决默认值为NULL的问题。

0
0 Comments

问题出现的原因是在创建表时,定义了一个非空的bit类型列,并且指定了默认值为0。然而,当执行插入语句时,如果没有为该列提供值,则默认值为NULL而不是0。这导致了默认值不起作用的问题。

解决方法是在创建表时,将默认值设置为'0'而不是使用NULL。这样,即使没有为该列提供值,它仍将被设置为默认值'0'。

以下是修复后的代码示例:

CREATE TABLE #temp
    (
      id INT ,
      myBit BIT NOT NULL DEFAULT '0'  -- not null with default of false
    );
INSERT  INTO #temp
        ( id )  -- only insert to id col, the default will set itself
VALUES  ( 123 );
INSERT INTO #temp
        ( id, myBit )
VALUES  ( 456, 1 )  -- this insert adds a true value to override the default
SELECT  *
FROM    #temp;
DROP TABLE #temp;

修复后的代码会产生以下结果:

id  myBit
123 0
456 1

0