Использование курсора и временной таблицы вы можете получить, что вы хотите. не знаю, является ли цель,
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
'CASE' используется, когда решение принимается внутри неинвариантного контекста (например, внутри' SELECT'). 'IF' используется внутри процедурного контекста, такого как пакет T-SQL вне запроса или оператор DDL. – Dai
'CASE' является ** выражением ** (например,' a + b'), которое в конечном итоге возвращает одно атомное значение ('INT',' VARCHAR'), но ** НЕ МОЖЕТ использовать ** управление потоком программы - вам нужно использовать 'IF',' ELSE' и т. д. для этого –