причина, по которой вы получаете эту ошибку, заключается в том, что вы можете назначить только один элемент вашей переменной @ Field1. SQL Server думает, что вы пытаетесь назначить несколько nvarchars одной переменной @ Field1. Вот как исправить ваш запрос:
DECLARE @ReturnValue INT
DECLARE @Field1 VARCHAR(50)
SET @Field1 = (SELECT TOP 1 Field1
FROM YourTable
WHERE Field1 = 'Gary')
IF @Field1 = 'Gary' OR @Field1 = 'Sarah'
SET @ReturnValue = '1'
ELSE
SET @ReturnValue = '0';
SELECT @ReturnValue --will be 1
Когда вы используете SELECT TOP 1 Field1 FROM YourTable
, вы явно указываете SQL Server взять возвращаемую верхнюю запись и присвоить результат Column для Field1 вашей переменной @ Field1.
Если у вас есть несколько результатов, которые вы хотите захватить, тогда временная таблица может сделать это:
CREATE TABLE #Field1s (
Id INT PRIMARY KEY IDENTITY (1,1),
IsGaryOrSarah BIT NOT NULL
)
INSERT INTO #Field1s
SELECT CASE WHEN Field1 = 'Gary' THEN 1
WHEN Field1 = 'Sarah' THEN 1
ELSE 0 END
FROM YourTable
SELECT * FROM #Field1s
Однако, если целью является выполнение какой-либо операции на основе результата как части рабочего процесса, то вы почти наверняка захотите сделать это из кода приложения. Вы бы запросили таблицу из приложения, и вы могли бы легче реализовать рабочий процесс условной логики, используя язык, разработанный для этой задачи.