【问题标题】:Select inside a where statement在 where 语句中选择
【发布时间】:2020-01-29 07:36:03
【问题描述】:

我只是想确保我做对了。

我有两张桌子:

Customer:
ID: GUID
name: varchar
... etc
 and Reference
ID: GUID
customerid: GUID ----> FK
Myreference: varchar (max)
timestamp: datetime

如果引用已被其他客户使用,我有以下存储过程检查引用表。

    @CustomerId [uniqueidentifier], 
    @Myreference [nvarchar]
AS 
BEGIN 
    SELECT  
        CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT) AS IsInUse
    FROM  Reference
    WHERE CustomerId <> @CustomerId AND Myreference= @Myreference 
END 
GO 

现在,我需要更改存储过程来检查引用是否被其他客户使用,以检查其他客户是否有其他引用记录,然后返回 0,否则返回 1。

这是我的零钱,但我很确定它会变得更好。

IF (SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT) AS IsInUse
   FROM Reference 
   WHERE CustomerId <> @CustomerId AND  
         Myreference = @Myreference ) = 1 
    BEGIN 
        SELECT CAST(CASE WHEN COUNT(*) > 1 THEN 0 ELSE 1 END AS BIT) AS IsFine 
        FROM Reference 
        WHERE CustomerId = (SELECT CustomerId 
                            FROM Purchase.BureauCreditEnquiry 
                            WHERE CustomerId <> @CustomerId AND  
                                  Myreference = @Myreference ); 
    END; 
ELSE 
    BEGIN 
        SELECT 0; 
    END; 

【问题讨论】:

  • Myreference 真的只有 1 个字符吗?
  • @AlexMouses 。 . .您应该提供示例数据、期望的结果以及您想要实现的逻辑的解释。
  • 更正了错误的数据类型。

标签: sql sql-server select-case


【解决方案1】:

因为这是stored procedure,所以使用sql 变量。

DECLARE @IsInUse INT
DECLARE @isFine INT

SET @IsInUse = SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT) AS IsInUse
            FROM Reference 
            WHERE CustomerId <> @CustomerId AND  
            Myreference = @Myreference

SET @isFine = SELECT CAST(CASE WHEN COUNT(*) > 1 THEN 0 ELSE 1 END AS BIT) AS IsFine 
            FROM Reference 
            WHERE CustomerId = (SELECT CustomerId 
                            FROM Purchase.BureauCreditEnquiry 
                            WHERE CustomerId <> @CustomerId AND  
                                  Myreference = @Myreference )

SELECT IIF(@IsInUse >= 1, @isFine, 0)

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多