2016-07-15 127 views
2

非常独特..... 并无权更改整理空字符串改变为0 INT

我创建了一个表

CREATE TABLE BT_INPUT_CHK 
(
    [ID] [int] NOT NULL, 
    [RELID] [int] NULL, 
    [OPNO] [varchar](35) NULL 
) 

,当我插入数据

INSERT ZBT_INPUT_CHK ([ID],[RELID],[OPNO]) 
VALUES('1000002','','') 

问题从这里开始。 为VARCHAR空字符串作为插入相同,但对于int空字符串被改变为0

归类:Latin1_General_CI_AS

谁能请帮助我在此。 谢谢

+1

你期望一个整数持有空字符串?您是否愿意导致错误? –

+0

@JonnyHenly:我想让列不为空,即使空字符串通过,也应该抛出错误。所以它不应该允许插入空字符串或空字符串。但在我的情况下,空字符串转换为0,并插入到表。 –

+0

@GiladGreen:我试图让列不为空,即使空字符串通过,也应该抛出错误。所以它不应该允许插入空字符串或空字符串。但在我的情况下,空字符串转换为0,并插入到表。 –

回答

0

当空sting被隐式转换为INT时,它将转换为零。如果你需要将它设置为NULL,那么使用NULLIF函数。

DECLARE @RELID VARCHAR(10) = '' 

INSERT ZBT_INPUT_CHK ([ID],[RELID],[OPNO]) 
VALUES('1000002',NULLIF(@RELID,''),'') 
+1

OP不想将其设置为NULL。 *“我正在尝试使列不为空”* - 来自OP的评论。 –

+1

当空字符串时,OP想为NULL引发错误,而用ZERO添加行。 –

+0

@Jatin:对不起,但值从平面文件插入表。 –

0

Check This ..你会得到插入空字符串到数字列

INSERT into BT_INPUT_CHK ([ID],[RELID],[OPNO]) VALUES('1000007',NULL,''); 
+0

这些值来自平面文件,我不想要插入空字符串。所以我已经使列不为空,但空字符串被插入为0.这是错误值。请建议。 –

0

试试这个清晰的思路,

CREATE TABLE #BT_INPUT_CHK 
(
    [ID] [int] NOT NULL, 
    [RELID] [int] NULL, 
    [OPNO] [varchar](35) NULL 
) 

INSERT #BT_INPUT_CHK ([ID],[RELID],[OPNO]) 
VALUES('1000002',(case when cast('' as varchar(10))='' then 'Error' else '' end),'')