SQL检查列上的约束并忽略默认值,错误输出

时间:2014-03-08 16:54:33

标签: sql-server sql-server-2008

SQL Server 2008 这是我得到的错误信息。 错误:消息547,级别16,状态0,行1 INSERT语句与CHECK约束“CK__S_ODS_L2 __ ACTIV _7A5F6E76”冲突。冲突发生在数据库“SourceDB”,表“dbo.Datatbl”,列“ACTIVE_FLAG”中。

但是此列的默认值为“Y”。 这是表脚本     使用[SourceDB]     GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Datatbl](
    [BATCH_NB] [varchar](10) NULL,
    [RCRD_NB] [varchar](10) NULL,
    [STS_CD] [varchar](10) NULL,
    [ENTR_DT] [varchar](50) NULL,
    [COMMENTS_TXT] [varchar](500) NULL,
    [ACTIVE_FLAG] [char](1) NOT NULL,
    [Err_CD] [varchar](15) NULL,
    [Source_Fld_Name] [varchar](500) NULL,
    [Source_Fld_Val] [varchar](500) NULL,
    [Error_Desc] [varchar](500) NULL,
    [ISRT_USR] [varchar](10) NULL,
    [UPDT_USR] [varchar](10) NULL,
    [ISRT_DT] [varchar](50) NULL,
    [UPDT_DT] [varchar](50) NULL,
    [ProcessDate] [datetime] NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Datatbl]  WITH CHECK ADD CHECK  (([ACTIVE_FLAG]='N' OR     [ACTIVE_FLAG]='Y'))
GO

ALTER TABLE [dbo].[Datatbl] ADD  DEFAULT ('Y') FOR [ACTIVE_FLAG]
GO

这是我的插入查询

INSERT INTO Datatbl 
(BATCH_NB,
RCRD_NB,
STS_CD,
ENTR_DT,
COMMENTS_TXT,
ACTIVE_FLAG,
Err_CD,
Source_Fld_Name,
Source_Fld_Val,
Error_Desc,
ISRT_USR,
UPDT_USR,
ISRT_DT,
UPDT_DT,
ProcessDate)        
Values (
46401, --Batch
'308', --Rcrd_NB
'1', --STS_CD
'2014-03-07 15:03:11.000000', -- Entr_DT
'Comments test', --comments
'', -- Active_flag, see no value here
'',--Err_Cd
'',--Src_Fld_Nm
'',--Src_Fld_Val
'Error description ', --ErrDesc
'${user_id}', --Inst User
'', --Updt User
'2014-03-07 15:03:11.958578', --ISRT_DT
'',--UPDT_DT
'01/15/2014') -- Processdate

直到最近这种情况一直很好,但不知何故不起作用。 我不确定数据库方面有什么变化,或者数据可能就是这里的问题。

任何想法,请。让我知道。

谢谢, 辛迪!!

1 个答案:

答案 0 :(得分:0)

查询的问题是您为ACTIVE_FLAG添加了值'',当您将值传递给列时,将不会采用默认值。

如果要在列中插入默认值: - (1)只需从iNSERT命令中删除列及其值即可 要么 (2)用DEFAULT关键字替换它,(''不等于'Y'或'N',这是根本原因)

INSERT INTO Datatbl 
(BATCH_NB,
RCRD_NB,
STS_CD,
ENTR_DT,
COMMENTS_TXT,
ACTIVE_FLAG,
Err_CD,
Source_Fld_Name,
Source_Fld_Val,
Error_Desc,
ISRT_USR,
UPDT_USR,
ISRT_DT,
UPDT_DT,
ProcessDate)        
Values (
46401, --Batch
'308', --Rcrd_NB
'1', --STS_CD
'2014-03-07 15:03:11.000000', -- Entr_DT
'Comments test', --comments
--'', -- Active_flag, see no value here
DEFAULT, -- value replaced with default
'',--Err_Cd
'',--Src_Fld_Nm
'',--Src_Fld_Val
'Error description ', --ErrDesc
'${user_id}', --Inst User
'', --Updt User
'2014-03-07 15:03:11.958578', --ISRT_DT
'',--UPDT_DT
'01/15/2014') -- Processdate