Оператор вставки со столбцом, не равным 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-код родителя и вставить его вместо этого. Нет способа пропустить вставку любого столбца.