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

Vis*_*rma 17 sql sql-server exists sql-server-2008

 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]
Run Code Online (Sandbox Code Playgroud)

如果我想用t0.Categoryid设置我的变量在存在块内我怎么能这样做?

我想要的是将1替换为类别id值...

提前致谢..

M.A*_*Ali 28

Declare @CategoryID as int
SET @CategoryID =  CASE WHEN EXISTS(SELECT 1
                                    FROM  Categories
                                    WHERE Categoryname = @CategoryName)
                     THEN 1 ELSE 0
                   END
Run Code Online (Sandbox Code Playgroud)

另一种方式是......

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

  • 如果问题中所述,CategoryID永远不会设置为"类别ID值" (5认同)
  • 但是问题是将其设置为categoryId而不是1或0 (3认同)

Reu*_*ben 6

这将返回类别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];
Run Code Online (Sandbox Code Playgroud)

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


Dou*_*nen 5

我的2分钱

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

IF (@any = 1)
  PRINT 'Yes'
ELSE
  PRINT 'No'
Run Code Online (Sandbox Code Playgroud)


Ami*_*ngh 2

你可以这样尝试。

Declare @CategoryID as int
 Set @CategoryID =0;
    SELECT @CategoryID=t0.Categoryid
    FROM Categories AS [t0]
    WHERE [t0].Categoryname = @CategoryName
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么你被迫使用它? (2认同)