在存在条件sql server中设置变量值

问题描述 投票:0回答:8
Declare @CategoryID as int
BEGIN  
    SELECT 
    (CASE 
        WHEN EXISTS(
            SELECT t0.Categoryid AS [EMPTY]
            FROM Categories AS [t0]
            WHERE [t0].Categoryname = @CategoryName
           ) THEN 1
        ELSE 0
     END) AS [value]

我想用 t0.Categoryid 在存在块内设置我的变量。这怎么办?

我想将 然后 1 替换为 类别 id 值...

sql sql-server sql-server-2008 exists
8个回答
44
投票
Declare @CategoryID as int
SET @CategoryID =  CASE WHEN EXISTS(SELECT 1
                                    FROM  Categories
                                    WHERE Categoryname = @CategoryName)
                     THEN 1 ELSE 0
                   END

另一种方式就像......

IF EXISTS (SELECT 1
           FROM  Categories
           WHERE Categoryname = @CategoryName)
 BEGIN
   SET @CategoryID = 1;
 END
ELSE
 BEGIN
   SET @CategoryID = 0;
 END

15
投票

我的2美分...

DECLARE @any BIT = 0
SELECT TOP 1 @any = 1 FROM Categories WHERE CategoryName = @CategoryName

IF (@any = 1)
  PRINT 'Yes'
ELSE
  PRINT 'No'

9
投票

如果存在则返回类别 id,如果不存在则返回 0。

SET @CategoryID = null;

SELECT @CategoryID = t0.Categoryid
FROM Categories AS [t0]
WHERE [t0].Categoryname = @CategoryName;

IF @CategoryID IS NULL
    SET @CategoryID = 0;

SELECT @CategoryID AS [value];

但是,我建议如果不存在就返回 null,或者返回一个额外的 @Exists (BIT) 来指示它是否存在。


3
投票
Declare @CategoryID as int
SET @CategoryID =
            (SELECT t0.Categoryid AS [EMPTY]
            FROM Categories AS [t0]
            WHERE [t0].Categoryname = @CategoryName)
SET @CategoryID =COALESCE(@CategoryID ,0)

2
投票

你可以这样尝试。

Declare @CategoryID as int
 Set @CategoryID =0;
    SELECT @CategoryID=t0.Categoryid
    FROM Categories AS [t0]
    WHERE [t0].Categoryname = @CategoryName

如果类别名称存在,则分配该类别的类别 ID,否则它保持为零。


0
投票

您可以在几行中使用此方法

DECLARE @CategoryID int
SELECT @CategoryID = Categoryid FROM Categories WHERE Categoryname = @CategoryName

IF @CategoryID IS NULL
    THROW 50000, N'not found', 1 -- do something
    
SELECT @CategoryID -- the Categoryid value

0
投票

答案取自微软论坛,由 David Dye 制作,但就我而言,它是正确的:

DECLARE @permissionID INT;

IF EXISTS(SELECT Id FROM Permission WHERE [Description] = 'SettlementReport')
    SET @permissionID = (SELECT Id FROMPermission
    WHERE [Description] = 'SettlementReport')

原答案


0
投票

将 Id 分配给变量并为 0 以防该行不存在的更简单直接的方法是用 0 预初始化所需变量并选择其中的数据。即:

DECLARE @id bigint = 0
SELECT @id = Id FROM Table1 WHERE column1 = '123'
SELECT @id; -- Should select 0 if the row was not available or the relevant Id if the record was found

这比在 select 语句后检查 NULL 更好,只是为了重新分配与这里其他人建议的相同的变量。

如果您希望它在不存在时设置为 NULL,您可能需要这样的查询:

DECLARE @id bigint = 0
SET @id = (SELECT Id FROM Table1 WHERE column1 = '123')
SELECT @id; -- Should select NULL if the row was not available or the relevant Id if the record was found
© www.soinside.com 2019 - 2024. All rights reserved.