Мога ли да разбера дали моята съхранена процедура използва стойността по подразбиране или изрична стойност?

Имам съхранен процес, който приема няколко параметъра. Един от тях е DateTime, който има стойност по подразбиране NULL.

За съжаление колоната, в която това ще бъде записано, е колона DateTime с възможност за нула. Това е проблем, тъй като понякога параметърът се игнорира, когато се извика съхранената процедура, но в крайна сметка презаписва валидна дата и час с null в целевата таблица.

Има ли някаква T-SQL функция или друг начин, който мога да използвам, за да определя дали повикващият действително е предал изрично NULL или просто е игнорирал този параметър и го е оставил да зададе стойността по подразбиране?

Единственото нещо, за което мога да се сетя за това;

  1. Също така има флаг, който показва, че потребителят иска да запази информацията DateTime
  2. Създаване на две версии на съхранената процедура; един с параметъра DateTime и без стойност по подразбиране и такъв, който напълно пропуска параметъра DateTime.

Нито една от двете не изглежда като фантастични идеи, така че всякакви идеи са високо оценени.


person Mr Moose    schedule 12.03.2012    source източник
comment
Освен просто проверка дали стойността на вашия параметър е NULL или не - не, не наистина. Нито трябва да има значение дали дадена стойност за съхранена процедура е дефинираната стойност по подразбиране или предоставена стойност - стойността си е стойност.   -  person marc_s    schedule 12.03.2012


Отговори (1)


Един от начините, по който можете да подходите към това, е да промените параметъра по подразбиране от NULL на "магическа" стойност - дата, която е малко вероятно вашите потребители да въведат - която след това можете да проверите за тялото на съхранената процедура и да действате съответно.

Добър избор на магическа стойност би бил началото или краят на диапазона от дати и време (01 Jan 1753 или 31 Dec 9999), в зависимост от действителния профил на данните.

person Ed Harper    schedule 12.03.2012