使用 Exists 或 Select 将此值设置为位变量哪个更好?
Posted
技术标签:
【中文标题】使用 Exists 或 Select 将此值设置为位变量哪个更好?【英文标题】:What is better to use Exists or Select to set this value to bit variable? 【发布时间】:2014-11-28 09:51:22 【问题描述】:我有指示行是否存在的位(或整数)变量。
是的,我知道最好只检查EXISTS
,但目前我需要将它的值设置为我的变量。
所以问题:使用SELECT
或EXISTS
哪个更好
DECLARE @signoff int
set @signoff = 0
Set @signoff = (SELECT TOP 1
AccountsOperations_ID
FROM AccountsOperations
WHERE Operation_ID = 3 and Submission_ID = @SubmissionID and AccountDate is null)
然后检查
if @signoff is null or @signoff = 0
或
DECLARE @signoff bit
set @signoff = 0
Set @signoff = SELECT CAST(
CASE WHEN EXISTS(SELECT TOP 1
AccountsOperations_ID
FROM AccountsOperations
WHERE Operation_ID = 3 and Submission_ID = @SubmissionID and AccountDate is null)
THEN 1
ELSE
0
END
AS BIT)
【问题讨论】:
在第二个例子中,你在哪里设置变量的值?您只是为其设置 1 或 0。 因为BIT
只有2个可能的值
我以为您想要变量中的 AccountOperations_ID 的值。检查你在做什么是不正确的。但是,如果您只是希望您的变量成为一个标志,那么您应该考虑将其默认为 0,然后将 IF EXISTS 子句设置为 1。这将是最好的方法。
【参考方案1】:
对我来说,应该是这样的:
DECLARE @signoff bit
set @signoff = 0
Set @signoff = SELECT CAST(
CASE WHEN EXISTS(SELECT 1
FROM AccountsOperations
WHERE Operation_ID = 3 and Submission_ID = @SubmissionID and AccountDate is null)
THEN 1
ELSE
0
END
AS BIT)
你根本不需要顶部,它可能会给查询带来额外的工作。
【讨论】:
【参考方案2】:添加到评论中:
DECLARE @signoff bit
set @signoff = 0
IF EXISTS(SELECT 1
FROM AccountsOperations
WHERE Operation_ID = 3 and Submission_ID = @SubmissionID and AccountDate is null)
SELECT @signoff = 1
您不需要 TOP
或 ELSE
,因为无论如何您都将其默认为 0。
【讨论】:
【参考方案3】:使用IF EXISTS 可以做到这一点,如果行存在则返回true,否则返回false。
DECLARE @signoff bit
IF EXISTS
(
SELECT 1
AccountsOperations_ID
FROM AccountsOperations
WHERE Operation_ID = 3 and Submission_ID = @SubmissionID and AccountDate is null
)
SET signoff = 1 -- row exists
ELSE
SET signoff = 0 -- row doesn't exists
【讨论】:
以上是关于使用 Exists 或 Select 将此值设置为位变量哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章
我通过蓝牙向 arduino nano ble 33 发送了一个值,并收到了树莓派的值。如何将此值转换为数字?
如何使用 moment.js 将此值 theHour[0].times 更改为时间格式 (HH:mm)