Select 在 where 语句中

Select inside a where statement

我只是想确保我做的是对的。

我有两个 table:

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

我有以下存储过程,用于检查引用 table 是否已被其他客户使用。

    @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 

现在,我需要更改存储过程来检查引用是否被另一个客户使用,以检查另一个客户是否有另一个引用记录然后 return 0 否则 return 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; 

因为这是 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)