2016-11-22 6 views
0

Я ищу способ выхода из T-SQL-скрипта, когда @Value имеет значение NULL. Это то, что я до сих пор, но она не работает, как ожидалось:T-SQL 2008- Выход, когда значение равно NULL

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

'CASE' используется, когда решение принимается внутри неинвариантного контекста (например, внутри' SELECT'). 'IF' используется внутри процедурного контекста, такого как пакет T-SQL вне запроса или оператор DDL. – Dai

+1

'CASE' является ** выражением ** (например,' a + b'), которое в конечном итоге возвращает одно атомное значение ('INT',' VARCHAR'), но ** НЕ МОЖЕТ использовать ** управление потоком программы - вам нужно использовать 'IF',' ELSE' и т. д. для этого –

ответ

2

Возможно, это будет работать для вас:

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

Использование курсора и временной таблицы вы можете получить, что вы хотите. не знаю, является ли цель,

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