繁体   English   中英

SQL存储过程if语句(带位)

[英]SQL Stored Procedure if statement with bit

我的SQL存储过程中有if条件:

@isAlphabeticalSort bit = false

    if(@isAlphabeticalSort = false)
        ORDER BY V_CONSTAT_ACTUAL_DATES.DATE_TO_END
    Else
        ORDER BY V_CONSTAT_ACTUAL_DATES.JOB_NUMBER

但是我得到一些错误:

无效的列名false

'ORDER'附近的语法不正确

我什至尝试在if和else之间添加开始和结束,但仍然出现相同的错误....我在做什么错?

@isAlphabeticalSort bit = 0

参考: https : //msdn.microsoft.com/zh-cn/library/ms177603.aspx

您可能还会看看您的ORDER BY是如何编写的...

ORDER BY 
   CASE @isAlphabeticalSort 
      WHEN 0 THEN V_CONSTAT_ACTUAL_DATES.DATE_TO_END 
      ELSE V_CONSTAT_ACTUAL_DATES.JOB_NUMBER 
   END

编辑:您需要处理转换错误-例如:

ORDER BY 
   CASE @isAlphabeticalSort 
      WHEN 0 THEN CONVERT(VARCHAR(8),V_CONSTAT_ACTUAL_DATES.DATE_TO_END,112) 
      ELSE CONVERT(VARCHAR, V_CONSTAT_ACTUAL_DATES.JOB_NUMBER)
   END

TSQL识别为10

因此,您可以执行以下操作:

@isAlphabeticalSort bit = 0

if(@isAlphabeticalSort = 0)
    ORDER BY V_CONSTAT_ACTUAL_DATES.DATE_TO_END
Else
    ORDER BY V_CONSTAT_ACTUAL_DATES.JOB_NUMBER

要么

@isAlphabeticalSort bit = 0

if(@isAlphabeticalSort = CAST('FALSE' AS BIT))
    ORDER BY V_CONSTAT_ACTUAL_DATES.DATE_TO_END
Else
    ORDER BY V_CONSTAT_ACTUAL_DATES.JOB_NUMBER

检查位值。

编辑:

这三个语句都是等效的:

  • if(@isAlphabeticalSort = 0)
  • if(@isAlphabeticalSort = CAST('false' as bit))
  • if(@isAlphabeticalSort = CONVERT(bit, 'false'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM