如何确定每个colum_1中的数据类型,然后再将其放入isnull

时间:2017-02-10 13:50:23

标签: sql sql-server

我有以下查询:

select t1.cod_id,
     case when isnull(t1.colum_1,'')=isnull(t2.colum_1,'') then 'ok' else 'error' end colum_1,
     case when isnull(t1.colum_2,'')=isnull(t2.colum_2,'') then 'ok' else 'error' end colum_2,
     case when isnull(t1.colum_3,'')=isnull(t2.colum_3,'') then 'ok' else 'error' end colum_3,
     ...
     ...
     ...
     case when isnull(t1.colum_n,'')=isnull(t2.colum_n,'') then 'ok' else 'error' end colum_n,

from BD_1.MyTable t1 (nolock)
     inner join BD_2.MyTable t2 (nolock)
         on(t1.cod_id=t2.cod_id)

where t1.year='2009' and t1.mounth='05'

这是一个查询,我设置它来确定记录的数据是否在不同数据库中的两个表之间的每列中重合,但这些表在结构和面额上是相同的,但在记录数中没有,因为第二个只是第一个的摘要。这样做我会抛出一个ok,而不是error,但我遇到了null的字段,这些框标记为error,即使它等同于另一个表也是另一个null,这就是为什么我决定根据我在互联网上看到的脚本使用isnull的原因。但是这段代码的执行给了我以下错误:

Mens. 8114, Nivel 16, Estado 5, Línea 2
Error converting data type varchar to numeric.

t1.cod_id之后指向select的错误,我不知道的原因,我建议在我的工作中首先确定我确定列的字段类型是什么比较用'*'替换它们如果它是字符串,并且如果它是数字的话'-1',那么(")不是模糊的或类似的东西,然后进行比较

关键是如何在将colum_1放入isnull之前确定每个IF的数据类型,您可能必须使用int,但我不知道如何。

注意:cod_id的dataType为# use Switch; while(<DATA>) { print($_); } __DATA__ One line of data Second line of data

3 个答案:

答案 0 :(得分:1)

我会从

切换when
case when isnull(t1.colum_1,'')=isnull(t2.colum_1,'') the 'ok' ...

case when t1.colum_1=t2.colum_1 or (t1.colum_1 is null and t2.colum_1 is null) then 'ok' ...

注意:你错过了&#39; n&#39;在上面代码中的then以及星号*后面的逗号。

答案 1 :(得分:0)

isnull(t1.colum_1,'')

会产生此错误:

Error converting data type varchar to numeric.

如果colum_1是数字类型。 <{1}}中两个参数的数据类型必须相同。

答案 2 :(得分:0)

这里几乎没有错误

select * t1.cod_id,应为select *, t1.cod_id,...

 case when isnull(t1.colum_1,'')=isnull(t2.colum_1,'') the 'ok' else 'error' end colum_1,

应该是

 case when isnull(t1.colum_1,'') and isnull(t2.colum_1,'') then 'ok' else 'error' end as colum_1,

如果它是数字列,那么

 case when isnull(t1.colum_1, 0) and isnull(t2.colum_1,0) then 'ok' else 'error' end as colum_1,