Столбец, для которого установлено значение not null, допускает пустые строки ( ‘ ‘ )

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Я хочу, чтобы строка была равна нулю, даже если значение, указанное при вставке, равно («,»), Но теперь, когда я вставляю вот так, он вставляет пустую строку в столбец not null. Я пытался изменить таблицу, но это не работает.

 alter table Organization add check (org_name != '')
  

Я ожидаю, что выходные данные отклонят запись, когда я попытаюсь вставить пустое значение в столбец not null.

Комментарии:

1. Как это не работает? Это работает просто отлично , если только у вас нет чего-то, о чем вы нам не рассказываете.

2. @Sami Это ответ сам по себе. Вы абсолютно правы.

3. @svisvesh Возможно, вы захотите попробовать использовать NULLIFF (org_name, «) во время вставки в качестве обходного пути.

4. Может быть, вам нужно добавить какую-нибудь trim функцию? LTRIM(org_name) != ''

Ответ №1:

Как указал Сами, реальная проблема может заключаться в чем-то отличном от того, что вы подозреваете. В качестве обходного пути вы можете использовать функцию NULLIF, например, так:

 USE TEMPDB
CREATE TABLE #Org (ID INT, org_name VARCHAR (100) NOT NULL)

CREATE TABLE #Source (ColA INT, ColB VARCHAR (10))
INSERT INTO #Source VALUES (1, 'A'), (2, '')

INSERT INTO #Org
SELECT ColA,
      NULLIF (ColB, '')
FROM #Source

DROP TABLE #Org, #Source

-- Msg 515, Level 16, State 2, Line 8
-- Cannot insert the value NULL into column 'org_name', table 'tempdb.dbo.#Org________________________________________________________________________________________________________________000000002F34'; column does not allow nulls. INSERT fails.
-- The statement has been terminated.