sql - 在 where 语句中选择
问题描述
我只是想确保我做对了。
我有两张桌子:
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;
解决方案
因为这是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)
推荐阅读
- linux - 当节点平台通过 selenium 网格配置为 LINUX 时,操作系统在 Selenium Grid Hub 控制台上显示为未知
- pyomo - Pyomo:DAE参数估计和模型的逐步模拟
- xml - 使用 XPath 从命名空间 XML 有条件地提取值
- php - 插入命令不起作用并且错误消息拆分 $_SESSION[] 变量
- apache-spark - 从 mesos 代理清除 work_dir 中的数据
- c++ - Windows 拼写检查 API 返回不支持的语言
- python-2.7 - sed 命令被认为是一个字符串 - 如何转义?
- xml - 从 Excel 功能区 XML 中删除选项卡
- node.js - 无法安装 NodeJs 模块
- javascript - has-error 类未附加到 .form-group div