插入带有NON-NULLABLE列的语句

时间:2014-07-15 14:14:38

标签: sql sql-server insert non-nullable

我有一个SQL Server脚本,我用它来将一些数据插入数据库。我不会在这里上传整个脚本只是为了节省空间/时间,但我会包含重要的部分。

所以这就是问题所在。我有一个表有一些loginhtml的列,这个列是一个非可空类型。我希望此列在此特定添加上留空,以便它可以默认返回到我指向它的父级。所以这里我们有这个重要部分的声明:

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

在这里,我们将把它设置为:

set @loginHtml = null

这里的插入部分不可避免地会失败:

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

编辑:如何将此脚本“默认”为loginhtml列,无论PARENT应用程序是什么?是否有一些“IF”语句/子句可用于实现此目的?

4 个答案:

答案 0 :(得分:0)

只要列中的非null,就不能在其中插入空值。您可以尝试将其设置为空字符串或其他默认值。你也可以选择父母的html并插入它。没有办法跳过插入任何列。

答案 1 :(得分:0)

正如其他人所说,如果列上有一个Not Null约束,那你就不走运了,但是你可以做到

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

或更改

set @loginhtml = ''

查找父应用程序中的默认值。

你会写一个空白而不是任何东西。显然,你遇到没有loginhtml会遇到的任何问题,但如果这就是你想要的那就是你想要的!

答案 2 :(得分:0)

您可以调整脚本:

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

或调整您的表并添加默认约束:

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

答案 3 :(得分:0)

我可能在最初的帖子中没有提到这一点,我想为此道歉。但是数据库的设置方式是应用程序可以拥有父应用程序,因此将loginhtml设置为父应用程序并“技术上”跳过将其添加到新应用程序可以通过以下方式完成:

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

这成功运行并使“@loginhtml”默认为父应用程序为该值设置的任何内容。