Я пытаюсь создать хранимую процедуру, которая использует переменное количество параметров. Поскольку я довольно новичок в написании хранимых процедур и TSQL в целом, я решил попробовать и написать его только с одним параметром. Тем не менее, я продолжаю получать сообщение об ошибке «Должен объявить скалярную переменную @FirstName» при попытке выполнить ее. Прямо сейчас я пытаюсь сохранить инструкцию SQL в другой переменной @sql. Моя процедура выглядит следующим образом:Ошибка при объявлении параметра в хранимой процедуре
ALTER PROCEDURE [dbo].[GetEmployeeByParameters]
(@FirstName varchar(50))
AS
BEGIN
DECLARE @sql AS NVARCHAR(4000)
SET @sql = 'SELECT e.* from Employee e
WHERE e.FirstName = @FirstName'
EXEC (@sql)
END
Я посмотрел в другом месте и попытался EXEC sp_execute @sql, который не работал. Как ни странно, что работает, когда я не объявляю переменную @sql и вместо этого просто пишу свой запрос нормально. Поскольку это так, я предполагаю, что есть некоторая ошибка в моем использовании функций SET и EXEC. Я также не уверен на 100%, что я правильно использую BEGIN и END. Я понял, что BEGIN и END разделяют SQL-запросы на логические блоки и, следовательно, чаще используются, когда IF входит в игру. Может ли кто-нибудь сказать мне, что именно происходит с моим параметром здесь? Меня действительно путают, почему SQL Server считает, что он не объявлен.
Спасибо, Джо, это сработало как шарм! Если я правильно понял, переменный параметр действительно должен быть внутри кавычек, но просто не является частью строки @ sql? Это единственная причина, по которой я могу думать о тройных и четырехкратных одинарных кавычках, окружающих @ FirstName – Zajn
+1, для этого не используйте динамический SQl. – HLGEM