SQL,如果没有语法

SQL,如果没有语法,sql,if-statement,sql-server-2016,notin,Sql,If Statement,Sql Server 2016,Notin,谁能告诉我下面的代码有什么问题吗 IF (SELECT T0.U_DestType FROM OCRD T0 INNER JOIN ODLN T1 ON T1.CardCode = T0.CardCode WHERE T1.DocEntry ='4') NOT IN ('1','2','6') BEGIN SELECT 'SHOW_ERROR' FOR BROWSE END 它编译时不会出错,但不会给出预期结果(当U_DestType不是1、2或6时,声明SHOW_error) 非常感谢。使

谁能告诉我下面的代码有什么问题吗

IF (SELECT T0.U_DestType FROM OCRD T0 INNER JOIN ODLN T1 ON T1.CardCode = T0.CardCode WHERE T1.DocEntry ='4') NOT IN ('1','2','6')

BEGIN
SELECT 'SHOW_ERROR' FOR BROWSE
END
它编译时不会出错,但不会给出预期结果(当U_DestType不是1、2或6时,声明SHOW_error)


非常感谢。

使用
存在

IF Exists 
 (SELECT 1 FROM OCRD T0 INNER JOIN ODLN T1 ON T1.CardCode = T0.CardCode WHERE T1.DocEntry ='4' and T0.U_DestType NOT IN ('1','2','6'))
Begin
--some quwery
End

您的联接有可能返回多个值,您的查询将失败。

使用
存在

IF Exists 
 (SELECT 1 FROM OCRD T0 INNER JOIN ODLN T1 ON T1.CardCode = T0.CardCode WHERE T1.DocEntry ='4' and T0.U_DestType NOT IN ('1','2','6'))
Begin
--some quwery
End

您的联接有可能返回多个值,并且您的查询将失败。

您也可以使用count函数 这样试试

IF ((SELECT count(T0.U_DestType) FROM OCRD T0 INNER JOIN ODLN T1 ON T1.CardCode = T0.CardCode WHERE T1.DocEntry ='4') NOT IN ('1','2','6'))==0)

BEGIN
SELECT 'SHOW_ERROR' FOR BROWSE
END

您也可以使用计数功能 这样试试

IF ((SELECT count(T0.U_DestType) FROM OCRD T0 INNER JOIN ODLN T1 ON T1.CardCode = T0.CardCode WHERE T1.DocEntry ='4') NOT IN ('1','2','6'))==0)

BEGIN
SELECT 'SHOW_ERROR' FOR BROWSE
END

我认为您希望OP的逻辑使用
exists
,但这绝对是比使用
count()
更好的解决方案。我认为您希望OP的逻辑使用
exists
,但这绝对是比使用
count()
更好的解决方案。