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)
我只是想确保我做的是对的。
我有两个 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)