Нулевая декларация ип 2018: скачать бланк и образец заполнения УСН доходы и доходы минус расходы

sql — проверьте, является ли параметр нулевым или пустым в хранимой процедуре

спросил

Изменено
2 года, 1 месяц назад

Просмотрено
262к раз

Я знаю, как проверить, является ли параметр нулевым, но я не уверен, как проверить, является ли он пустым… У меня есть эти параметры, и я хочу проверить, являются ли предыдущие параметры пустыми или нулевыми, а затем установить их, как показано ниже

 ПРОЦЕДУРА ИЗМЕНЕНИЯ [dbo].[GetSummary]
    @PreviousStartDate NVARCHAR(50) ,
    @PreviousEndDate NVARCHAR(50) ,
    @CurrentStartDate NVARCHAR(50) ,
    @CurrentEndDate NVARCHAR(50)
КАК
  НАЧИНАТЬ
    ЕСЛИ(@PreviousStartDate IS NULL ИЛИ EMPTY)
        SET @PreviousStartdate = '01.01.2010' например..
 

Буду признателен за помощь.

  • sql
  • sql-server-2008
  • хранимые процедуры
  • параметры
  • ноль

1

Я иногда использую NULLIF вот так…

 IF NULLIF(@PreviousStartDate, '') IS NULL
 

Вероятно, нет никаких причин, по которым это лучше, чем способ, предложенный @Oded и @bluefeet, просто стилистические предпочтения.

Метод @danihp действительно классный, но мой усталый старый мозг не перешел к СЛИЯНИЮ, когда я думаю, что он пустой или нулевой 🙂

2

Вот общая схема:

 ЕСЛИ(@PreviousStartDate IS NULL ИЛИ @PreviousStartDate = '')
 

'' — это пустая строка в SQL Server.

0

Я использую объединение:

 ЕСЛИ ( ОБЪЕДИНЕНИЕ( @PreviousStartDate, '' ) = '' ) ...
 

вы можете использовать:

 IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
 

1

Как насчет объединения , объединения и nullif ?

 КОМПЛЕКТ @PreviousStartDate = объединение (nullif(@PreviousStartDate, ''), '01/01/2010')
 

Другой вариант:

 ЕСЛИ ISNULL(@PreviousStartDate, '') = '' . ..
 

см. функцию, основанную на этом выражении, на http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx

Чтобы проверить, является ли переменная нулевой или пустой, используйте это:

 IF LEN (ISNULL(@var, '')) = 0
 

1

Если вы хотите использовать необязательный параметр, используйте его.

 СОЗДАТЬ ПРОЦЕДУРУ uspGetAddress @City nvarchar(30) = NULL, @AddressLine1 nvarchar(60) = NULL
    КАК
    ВЫБРАТЬ *
    ОТ AdventureWorks.Person.Address
    ГДЕ Город = ISNULL(@Город,Город)
    AND AddressLine1 LIKE '%' + ISNULL(@AddressLine1, AddressLine1) + '%'
    ИДТИ
 

Чтобы проверить, является ли переменная нулевой или пустой, используйте этот

 IF(@PreviousStartDate IS NULL ИЛИ @PreviousStartDate = '')
 

Я также рекомендую проверять недопустимые даты:

 set @PreviousStartDate=case ISDATE(@PreviousStartDate)
    когда 1, то @PreviousStartDate
        еще '01. 01.2010'
    конец
 

Если вам нужна проверка «Нулевой, пустой или пробел», вы можете избежать ненужных манипуляций со строками с помощью LTRIM и RTRIM , как это.

9]%’, @параметр), 0) > 0
РЕЙСЕРРОР …

2

Вы можете попробовать это: —

 IF NULLIF(ISNULL(@PreviousStartDate,''),'') IS NULL
УСТАНОВИТЕ @PreviousStartdate = '01.01.2010'
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Как ограничить NULL в качестве параметра хранимой процедуры SQL Server?

Можно ли создать хранимую процедуру как

 CREATE PROCEDURE Dummy
    @ID ЦЕЛОЕ НЕ НУЛЕВОЕ
КАК
НАЧИНАТЬ
КОНЕЦ
 

Почему нельзя сделать что-то подобное?

  • sql
  • sql-server
  • хранимые процедуры

Вы можете проверить его NULL-ness в sproc и RAISERROR , чтобы сообщить о состоянии вызывающему местоположению.

 CREATE proc dbo.CheckForNull @i int
как
начинать
  если @i равно нулю
    raiserror('Значение @i не должно быть нулевым', 15, 1) -- с журналом
конец
ИДТИ
 

Затем вызовите:

 exec dbo.CheckForNull @i = 1
 

или

 exec dbo.CheckForNull @i = null
 

3

Ваш код правильный, разумный и даже хороший. Вам просто нужно дождаться SQL Server 2014 , который поддерживает такой синтаксис.

В конце концов, зачем перехватывать во время выполнения, если можно во время компиляции?

См. также этот документ Microsoft и найдите Natively Compiled там.

Как говорит dkrez, допустимость значений NULL не считается частью определения типа данных. Я все еще удивляюсь, почему бы и нет.

2

Ну что ж, кажется, я не могу редактировать пост @Unsliced, потому что «Это редактирование отклоняется от первоначального замысла поста. Даже правки, которые должны вносить радикальные изменения, должны быть направлены на сохранение целей владельца поста».

Итак, (@crokusek и все заинтересованные) это мое предполагаемое решение:

Вы можете проверить его NULL-значение в sproc и RAISERROR , чтобы сообщить о состоянии вызывающему местоположению.

 СОЗДАТЬ процедуру dbo.CheckForNull
  @name sysname = 'параметр',
  @значение sql_variant
как
начинать
  если @значение равно нулю
    raiserror('Значение %s не должно быть нулевым', 16, 1, @name) -- с логом
конец
ИДТИ
 

Затем вызовите:

 exec dbo.CheckForNull @name 'whateverParamName', @value = 1
 

или

 exec dbo.CheckForNull @value = null
 

5

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

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

 ЕСЛИ НЕНУЛЬ(@парам) ТО
    поднять ошибку....
КОНЕЦ ЕСЛИ
 

Концепция NULL в контексте хранимой процедуры даже не определена четко, особенно по сравнению с контекстом таблицы или выражения SQL.