【发布时间】: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