Строка:
IF EXISTS (SELECT 1 FROM @First3Digits WHERE SubjectName = @Subj_ID)
не работает, потому что @First3Digits
- это имя таблицы (я предполагаю, хотя это всего лишь nvarchar(3)
!) И не может использоваться напрямую в таком запросе , вместо этого вам нужно использовать динамический c SQL, в частности sp_executesql
следующим образом:
PRINT 'View exists'
declare @Sql nvarchar(max);
set @Sql = 'select @Result = case when exists (select 1 from dbo.' + quotename(@First3Digits) + ' where SubjectName = ''' + @Subj_ID + ''') then 1 else 0 end';
execute sp_executesql @Sql, N'@Result bit out', @Result = @Result out;
-- @Result is now set as required
Обратите внимание на использование quotename
для защита от SQL инъекции.
Кроме того, на первый взгляд, ваш дизайн выглядит очень нуждающимся в улучшении. Создание представления для Subject
(что бы это ни было на самом деле) кажется некорректным, подверженным проблемам обслуживания и проблемам масштабируемости. Наверное, есть способ получше.