【问题标题】:T-SQL 2008- Exit when Value is NULLT-SQL 2008- 当值为 NULL 时退出
【发布时间】:2016-11-22 19:36:49
【问题描述】:

我正在寻找一种在@Value 为空时退出 T-SQL 脚本的方法。这是我到目前为止所拥有的,但它没有按预期工作:

SELECT 
    @Value,
    CASE 
       WHEN @Value IS NULL   
          RAISERROR('EXIT', 16, 1) 
FROM 
    table 
WHERE 
    name LIKE 'test'

【问题讨论】:

  • CASE 用于在非命令式上下文中做出决定时(例如在SELECT 中)。 IF 用于过程上下文中,例如查询或 DDL 语句之外的 T-SQL 批处理。
  • CASE 是一个表达式(如a+b),它最终返回一个单一的原子值(一个INT,一个VARCHAR)——但它不能用来做程序流控制——你需要使用IFELSE等来实现

标签: sql-server tsql isnull raiserror


【解决方案1】:

也许这对你有用:

DECLARE @Value INT = 1
IF( @Value IS NULL)
BEGIN
    RAISERROR('Exit',16,1)
END
ELSE
BEGIN
    SELECT @Value
END

【讨论】:

    【解决方案2】:
    IF @Value IS NULL RAISERROR('EXIT', 16,1);
    

    【讨论】:

      【解决方案3】:

      使用游标和临时表,您可以获得所需的输出。不知道是不是这个目标,

      USE AdventureWorksLT2012
      
      DECLARE @CustomerID AS INT
      DECLARE @CompanyName AS VARCHAR(MAX)
      DECLARE @EmailAddress AS VARCHAR(MAX)
      
      CREATE TABLE #output (CustomerID INT,CompanyName VARCHAR(MAX),EmailAddress VARCHAR(MAX)) 
      
      DECLARE testCursor CURSOR 
          FOR 
          SELECT TOP (100) 
             CustomerID
            ,CompanyName
            ,EmailAddress
          FROM SalesLT.Customer   
          ORDER BY customerID DESC;
      
      OPEN testCursor;
      
      FETCH NEXT FROM testCursor
      INTO @CustomerID, @CompanyName, @emailAddress;
      if @EmailAddress is not null
      BEGIN 
          INSERT INTO #output values( @CustomerID, @CompanyName, @emailAddress);  
          WHILE @@FETCH_STATUS = 0  
           BEGIN  
              FETCH NEXT FROM testCursor
              INTO @CustomerID, @CompanyName, @emailAddress;
              if @EmailAddress is null 
              BEGIN
                RAISERROR('Exit',16,1);
                BREAK;
              end
              INSERT INTO #output values( @CustomerID, @CompanyName, @emailAddress);
             END;
          END
      CLOSE testCursor;
      DEALLOCATE testCursor;
      
      SELECT * FROM #output;
      
      DROP TABLE #output
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-25
        • 1970-01-01
        • 2016-11-06
        相关资源
        最近更新 更多