Есть ли способ ограничить значения параметров хранимой процедуры в SQL Server 2008? Это варчар. Например. Я желаю, чтобы это было только «Производство», «Развитие» или «ОК». Я хочу, чтобы он ошибся, если кто-то передает «Prod», «Dev», «UAT» или что-то еще.Ограничение значений хранимой процедуры в SQL Server
ответ
Вы можете использовать инструкцию IF ... ELSE.
CREATE PROC SomeProc
@par VARCHAR(50)
AS
BEGIN
IF @par NOT IN ('Production', 'Development', 'QA')
RAISERROR(N'Your Message',16,1)
-- MORE CODE HERE
END
Вы могли бы степени решения с помощью таблицы для поиска допустимых значений.
Используя комбинацию из IF
блоков и ключевое слово RAISEERROR
, вы должны быть способны исполнить все, что вы хотите.
Однако это ограничение звучит так, как будто оно принадлежит вашему приложению в сравнении с хранимой процедурой.
Не соглашайтесь с последней строкой. Если процедура, которую, как ожидается, вызывается с параметром из определенного списка, кажется совершенно разумной, чтобы вызвать ошибку, если какая-то глупость прошла, а не предполагать по умолчанию или терпеть неудачу. –
Я думаю, что это справедливая точка, я бы ограничил логику SP только CRUD и проверил проверку ввода дескриптора приложения. В конце концов, приложение подпадает под контроль источника, контроль версий, обзоры кода и т. Д., Где логика SP часто остается незамеченной и становится трудно отлаживать. – RobJohnson
@MartinSmith. Если хранимая процедура не выполняется в командной строке или администраторами, использующими что-то вроде Management Studio, я не понимаю, почему эта логика необходима в хранимой процедуре. То, что вы описали, может быть легко реализовано в приложении, где бизнес-логику можно скрыть. –
Единственный способ, которым я могу думать об этом, - это вручную проверить ценность самостоятельно. В качестве примерного примера:
CREATE PROCEDURE [dbo].[MyProcedure]
@value varchar(32)
AS
BEGIN
declare @isAllowed bit = 0
if @value in ('Hello', 'World')
set @isAllowed = 1
if @isAllowed begin
-- Do work here
end
else begin
-- Send error here
end
END
- 1. Задача хранимой процедуры SQL Server
- 2. SQL Server: Создание хранимой процедуры
- 3. хранимой процедуры параметров SQL Server
- 4. Дата хранимой процедуры SQL Server
- 5. Значение хранимой процедуры SQL Server
- 6. SQL Server: транзакция хранимой процедуры
- 7. Ускорение хранимой процедуры SQL Server
- 8. Вопрос хранимой процедуры SQL Server
- 9. Параметры хранимой процедуры SQL Server
- 10. Сбой хранимой процедуры SQL Server?
- 11. Ограничения параметров хранимой процедуры SQL Server
- 12. Вызов хранимой процедуры из другой хранимой процедуры SQL Server
- 13. SQL - Ограничение входных параметров хранимой процедуры
- 14. Возвращение нескольких значений из хранимой процедуры SQL Server
- 15. Ошибка в SQL Server 2005 хранимой процедуры
- 16. Создание хранимой процедуры SQL Server в VB.NET
- 17. Параметры вывода хранимой процедуры в SQL Server
- 18. Ошибка SQL Server в параметрах хранимой процедуры
- 19. Преобразование хранимой процедуры SQL Server в oracle
- 20. Отладка хранимой процедуры в SQL Server 2008
- 21. Дополнительные параметры хранимой процедуры в SQL Server
- 22. Длина хранимой процедуры в SQL Server
- 23. Выполнение хранимой процедуры в SQL Server
- 24. Получить текст хранимой процедуры в SQL Server
- 25. Выполнение одинаковой хранимой процедуры в SQL Server
- 26. параметризованная ИНЕКЕ в SQL Server хранимой процедуры
- 27. SQL Server 2012 Запись возвращаемых значений хранимой процедуры для ячеек с использованием хранимой процедуры
- 28. Ограничение внешнего ключа хранимой процедуры
- 29. Возвращение нескольких значений из хранимой процедуры sql
- 30. Возвращаемые значения из хранимой процедуры SQL Server?
Вы пытались добавить логику проверки в рамках самой хранимой процедуры? Например. проверьте значение параметра и используйте RAISE ERROR, если он не соответствует вашим критериям. – RobJohnson