Как ограничить ПУСТОЙ УКАЗАТЕЛЬ как параметр к SQL Server хранимой процедуры?

36
задан captainsac 26 June 2015 в 06:04
поделиться

3 ответа

Проверка параметра в настоящее время не является функцией процедурной логики в SQL Server, и NOT NULL является только одним возможным типом подтверждения правильности данных. Тип данных char в таблице имеет спецификацию длины. Это должно быть реализовано также? И как Вы обрабатываете исключения? Существует обширная, высоко разработанная и несколько основанная на стандартах методология для обработки исключений в схемах таблицы; но не для процедурной логики, вероятно, потому что процедурная логика определяется из реляционных систем. С другой стороны, хранимые процедуры уже имеют существующий механизм для того, чтобы сгенерировать ошибочные события, набросился на многочисленные API и языки. Нет такой поддержки декларативных ограничений типа данных на параметры. Последствия добавления его обширны; тем более, что это хорошо поддерживается и расширяемое, для простого добавления кода:

IF ISNULL(@param) THEN
    raise error ....
END IF

понятие ПУСТОГО УКАЗАТЕЛЯ в контексте хранимой процедуры даже не четко определено особенно по сравнению с контекстом таблицы или SQL-выражения. И это не определение Microsoft. Группы стандартов SQL провели много лет, генерировав большую литературу, устанавливающую поведение ПУСТОГО УКАЗАТЕЛЯ и границы определений для того поведения. И хранимые процедуры не являются одним из них.

хранимая процедура А разработана, чтобы быть максимально легкой для создания производительности базы данных максимально эффективной. Типы данных параметров там не для проверки, но позволять компилятору дать оптимизатору запросов лучшую информацию для компиляции самого лучшего плана запросов. Ограничение NOT NULL на параметр направляется вниз целый путь nother путем создания компилятора более сложным для новой цели проверить аргументы. И следовательно менее эффективный и более тяжелый.

существует причина, которая не записаны хранимые процедуры, поскольку C# функционирует.

-4
ответ дан dkretz 27 November 2019 в 06:00
поделиться

Вы могли проверить на его ПУСТОЕ в sproc и RAISERROR для сообщения состояния к местоположению вызова.

CREATE   proc dbo.CheckForNull @i int 
as
begin
  if @i is null 
    raiserror('The value for @i should not be null', 15, 1) -- with log 

end
GO

Тогда вызов:

exec dbo.CheckForNull @i = 1 

или

exec dbo.CheckForNull @i = null 
46
ответ дан Unsliced 27 November 2019 в 06:00
поделиться

Одна причина, почему Вам, возможно, понадобится такой синтаксис, состоит в том, что при использовании SP в мастере графического интерфейса пользователя набора данных C# он создает функцию с nullable параметрами, если нет никакого пустого ограничения. Никакая пустая регистрация тела SP не помогает ему.

0
ответ дан 27 November 2019 в 06:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: