Оператор вставки со столбцом, не равным NULLABLE

У меня есть сценарий SQL Server, который я использую, чтобы вставить некоторые данные в базу данных. Я не буду загружать весь сценарий здесь только для экономии места / времени, но я включу важные моменты.

Так вот в чем проблема. У меня есть таблица, в которой есть столбец для некоторых loginhtml, этот столбец имеет тип NULL Я бы хотел, чтобы этот столбец оставался пустым в этом конкретном добавлении, чтобы он мог по умолчанию вернуться к тому родителю, на которого я указываю. Итак, у нас есть декларация для этой важной части:

declare @loginTitle varchar(250), @loginHtml varchar(max)

И здесь у нас есть то, что будет установлено:

set @loginHtml = null

И вот часть вставки, которая неизбежно потерпит неудачу:

insert dbo.ApplicationLogin(ApplicationID, Title, Html)
   select @appID, @loginTitle, @loginHtml

РЕДАКТИРОВАТЬ: Как я могу иметь этот сценарий "по умолчанию" столбец loginhtml для любого приложения PARENT? Есть ли какое-то "IF" утверждение / предложение, которое можно использовать для достижения этой цели?

4 ответа

Решение

Возможно, я не упомянул об этом в первоначальном посте, и я хотел бы извиниться за это. Но способ настройки базы данных заключается в том, что приложения могут иметь родительские приложения, поэтому установка loginhtml для родительского приложения и "технически" пропуск его добавления в новое приложение может быть выполнен следующим образом:

if(@loginHtml is not null)
begin
    insert dbo.ApplicationLogin(ApplicationID, Title, Html)
    select @appID, @loginTitle, @loginHtml
end

Это выполняется успешно и устанавливает по умолчанию значение "@loginhtml" для того, что родительское приложение установило для этого значения.

Как уже говорили другие, если в столбце есть ограничение Not Null, вам не повезло, но вы могли бы сделать

if @loginhtml is null 
    begin
       set @loginhtml = ''
    end

Или поменять

set @loginhtml = ''

искать независимо от того, что по умолчанию в родительском приложении.

и вы будете писать пустым вместо всего. Вы, очевидно, сталкиваетесь с любыми проблемами, не связанными с отсутствием loginhtml, но если это то, что вы хотите, то это то, что вы хотите!

Вы можете настроить свой скрипт:

insert dbo.ApplicationLogin(ApplicationID, Title, Html)
select @appID, @loginTitle, ISNULL(@loginHtml, '')

Или скорректируйте свою таблицу и добавьте ограничение по умолчанию:

ALTER TABLE ApplicationLogin ADD DEFAULT (('')) FOR [Html];

Пока столбец не нулевой, вы не можете вставить в него нулевое значение. Вы можете попробовать установить пустую строку или другое значение по умолчанию. Вы также можете выбрать HTML-код родителя и вставить его вместо этого. Нет способа пропустить вставку любого столбца.

Другие вопросы по тегам