Tsql 如何修复在“开始”附近预期条件的上下文中指定的非布尔类型的表达式。?

Tsql 如何修复在“开始”附近预期条件的上下文中指定的非布尔类型的表达式。?,tsql,Tsql,嘿,我有这个问题 IF (select kmkood from or_arved_read where kmkood = '1' or kmkood = '14' or kmkood = '15' or kmkood = '6' ) BEGIN SET @stat_vat = 21 IF (select kmkood from or_arved_read where kmkood = '2' or kmkood = '7' ) SET @stat_vat = 12 但它

嘿,我有这个问题

IF (select kmkood from or_arved_read where kmkood = '1' or kmkood = '14' or kmkood = '15' or kmkood = '6' )
    BEGIN
    SET @stat_vat = 21
IF (select kmkood from or_arved_read where kmkood = '2' or kmkood = '7' )
    SET @stat_vat = 12
但它返回一个非布尔类型的表达式,该表达式是在“BEGIN”附近预期条件的上下文中指定的

如何修复它?

首先,您的IF没有布尔表达式。子查询返回一个值,或者更准确地说,在这种情况下,将返回多个值,并导致列kmkood出现不同的错误,但是您不会对该值执行任何操作。该列需要什么值?格式应如下所示:

如果从dbo.SomeTable中选择SomeColumn,其中…='有价值的 此外,如果你有一个开始,你需要一个结束,而你没有:

IF (SELECT SomeColumn FROM dbo.SomeTable WHERE... ) = 'SomeValue'
BEGIN
    {Do several statements}
END
但是,由于您只是在执行SET语句,因此实际上不需要BEGIN和END语句

我怀疑你在这里真正想要的是什么,然而,在一个现实中:

如果存在,则从dbo中选择1。或读取kmkood在1,14,15,6中的位置 设置@stat_vat=21; 如果存在,则从dbo中选择1。或读取kmkood在2,7中的位置 设置@stat_vat=12; 您也不需要所有这些OR,一个IN很好用,数字不应该用单引号引起来,这样会使事情变得更短。

首先,您的IF没有布尔表达式。子查询返回一个值,或者更准确地说,在这种情况下,将返回多个值,并导致列kmkood出现不同的错误,但是您不会对该值执行任何操作。该列需要什么值?格式应如下所示:

如果从dbo.SomeTable中选择SomeColumn,其中…='有价值的 此外,如果你有一个开始,你需要一个结束,而你没有:

IF (SELECT SomeColumn FROM dbo.SomeTable WHERE... ) = 'SomeValue'
BEGIN
    {Do several statements}
END
但是,由于您只是在执行SET语句,因此实际上不需要BEGIN和END语句

我怀疑你在这里真正想要的是什么,然而,在一个现实中:

如果存在,则从dbo中选择1。或读取kmkood在1,14,15,6中的位置 设置@stat_vat=21; 如果存在,则从dbo中选择1。或读取kmkood在2,7中的位置 设置@stat_vat=12;
您也不需要所有这些OR,一个IN-works很好,数字不应该用单引号括起来,这样会使事情变得更短。

如果您想检查是否存在至少一条记录,您可以尝试如果存在请选择。。。我想把@stat_vat=21,其中kmkood=1或14或15或6@sergiomIs stat_vat放在表的一个字段中,还是放在读取的字段中?如果是这种情况,您需要的是UPDATE语句。否则,如果@stat\u vat是一个变量,则在之前添加EXISTS将修复booelan表达式。如果要检查是否存在至少一条记录,可以尝试如果EXISTSELECT。。。我想把@stat_vat=21,其中kmkood=1或14或15或6@sergiomIs stat_vat放在表的一个字段中,还是放在读取的字段中?如果是这种情况,您需要的是UPDATE语句。否则,如果@stat_vat是一个变量,那么在将修复booelan表达式之前存在adding。