【问题标题】:Returning a True or False value in a Stored Procedure在存储过程中返回 True 或 False 值
【发布时间】:2015-09-22 17:51:08
【问题描述】:

我正在尝试在 SQL Server Management Studio 中创建一个存储过程,我可以在其中找到属于具有特定状态的特定供应商的表中的任何发票。例如,我的 VB 应用程序中有供应商 123456,我想在我的 InvoiceTable 中查找他们是否有状态 = B 的发票,并返回 true 或 false 值。这是我迄今为止一直在尝试的:

ALTER PROCEDURE [dbo].[CheckStatus] 

@VendorNumber  char    
AS
BEGIN

Select distinct
CASE WHEN OrderStatus = 'B' and VendorNumber = @VendorNumber then 'true' else 'False' END as Status
from InvoiceTable

END 

现在它总是返回一个单数的“False”值,不管 orderstatus = B 和 vendornumber = @vendornumber 与否。

我不确定这是否可能,或者我什至在正确的页面上

【问题讨论】:

  • 您的查询为表中的所有记录构建一个“真”或“假”列表,然后将distincts 发送到'true','false'。显然“假”恰好在第一行,而您的应用从不读取第二行。
  • 我会将你的 case 子句移到 where 子句中,从中选择 count,如果你的结果 > 0,那么你知道你有发票。您的 distinct 可能总是会返回 2 行:“True”和“False”,而且可能恰好是 false 是第一个
  • @MikeDavis 我的超能力告诉我你的= @VendorNumber 永远不会是真的,因为你是declared it as char
  • @GSerg 我声明它与我的表中的数据类型相同
  • 我很确定您在@MikeDavis 表中有类似char(50) 的内容。

标签: sql-server sql-server-2008 stored-procedures vb6 ssms


【解决方案1】:

你可以试试这个

IF EXISTS(SELECT * 
    FROM InvoiceTable
    WHERE OrderStatus = 'B' and VendorNumber = @VendorNumber
    ) 
  SELECT 'True'
ELSE
  SELECT 'False'

【讨论】:

    【解决方案2】:

    我想在我的 InvoiceTable 中查找他们是否有任何发票,其中 status = B 并返回 true 或 false 值

    IF (SELECT COUNT(*) 
        FROM InvoiceTable
        WHERE OrderStatus = 'B' and VendorNumber = @VendorNumber
        ) > 0
      SELECT 'True'
    ELSE
      SELECT 'False'
    

    【讨论】:

    • 请不要在只需要exists的地方使用count
    【解决方案3】:
    DECLARE @Result varchar(10)
    
    IF EXISTS(SELECT * 
            FROM InvoiceTable
            WHERE OrderStatus = 'B' and VendorNumber = @VendorNumber
            ) 
    BEGIN
          SET @Result = 'True'
    END
    ELSE BEGIN
          SET @Result = 'False'
    END
    
    RETURN @Result
    

    注意 - 您可以使用 bit 而不是返回 'True' 或 'False'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-02
      • 2020-04-28
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2018-12-31
      • 2015-04-19
      • 2017-09-16
      相关资源
      最近更新 更多