#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.