Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 значение по умолчанию в хранимой процедуре  [new]
Niarah
Member

Откуда:
Сообщений: 2
Добрый день коллеги!

Пытаюсь создать хранимую процедуру, которая будет вызываться программой.

Задача
в программе будет 4 поля для ввода,
1) ФИО Сотрудника
2) ФИО Руководителя
3) Дата заведения
4) Дата Изменения

все эти поля являются не обязательными.. значит если их не задали то скалярной переменной в Хранимой процедуре должно быть значение по умолчанию такое, которые бы удовлетворяла любому значению.

Пример:
Есть список сотрудников с руководителями в каждой строке указана дата создания и дата изменения.
Если мы в программе не указываем ни одно значение то запрос должен выдать все записи в базе.
а если указали какое-то одно значение то запрос должен выдать все значению удовлетворяющие это конкретное значение.

А теперь внимание вопрос Знатокам!
какое установить значение по умолчанию... я порылся в интернете видел пару способов, но все они не работают... Так что прошу помощи )
Знаю что можно сделать кучу процедур каждая под конкретно ситуацию... Но хотелось бы узнать способ решения с одной процедурой без select Case или IF then

Заранее спасибо!!

Сама процедура
ALTER PROCEDURE [dbo].[DisciplineAll]
-- Add the parameters for the stored procedure here
@Super VarChar = 'dbo.Suprvisor.SVFio',
@StDate Date = 'dbo.Discipline.dateCreate',
@ChDate date = 'dbo.Discipline.dateChange',
@Fio VarChar = 'dbo.Employees.FIO'
AS
BEGIN
SELECT dbo.Employees.FIO as 'Оператор',
dbo.Suprvisor.SVFio as 'Нач.Смены',
dbo.Discipline.DateTrasp as 'Дата Нарушения',
dbo.Traspassing.TraspassingName as 'Нарушение',
dbo.Discipline.Comment as 'Комментарий',
dbo.Logins.FIO as 'Кто Внес',
dbo.Discipline.dateCreate as 'Дата Внесения',
dbo.Discipline.dateChange as 'Дата Изменения',
dbo.Discipline.UserChange

into #A
FROM [dbo].[Discipline]
inner join dbo.Employees on dbo.Discipline.EmployeesKey = dbo.Employees.EmployeesKey
inner join dbo.Suprvisor on dbo.Discipline.SuperVisorKey = dbo.Suprvisor.SuperVisorKey
inner join dbo.Traspassing on dbo.Discipline.TraspassingKey = dbo.Traspassing.TraspassingKey
inner join dbo.Logins on dbo.Discipline.UserCreate = dbo.Logins.ID
where dbo.Suprvisor.SVFio = @Super
and dbo.Discipline.dateCreate = @StDate
and dbo.Discipline.dateChange = @ChDate
and dbo.Employees.FIO = @Fio

select
#A.Оператор,
#A.[Нач.Смены],
#A.[Дата Нарушения],
#A.Нарушение,
#A.Комментарий,
#A.[Кто Внес],
#A.[Дата Внесения],
dbo.Logins.FIO as 'Кто Изменил',
#A.[Дата Изменения]
from #A
inner join dbo.Logins on #A.UserChange = dbo.Logins.ID


drop table #A
14 мар 14, 08:58    [15721694]     Ответить | Цитировать Сообщить модератору
 Re: значение по умолчанию в хранимой процедуре  [new]
UInt64
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 26
Niarah,

вот здесь как бы есть про параметры по умолчанию
http://technet.microsoft.com/ru-ru/library/ms189330(v=sql.105).aspx

А вообще-то, по-хорошему, ФИО Сотрудника - это не один параметр, а целых три.
14 мар 14, 09:18    [15721787]     Ответить | Цитировать Сообщить модератору
 Re: значение по умолчанию в хранимой процедуре  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
Переменное число критериев отбора в запросе
14 мар 14, 09:25    [15721815]     Ответить | Цитировать Сообщить модератору
 Re: значение по умолчанию в хранимой процедуре  [new]
Владимир Меньшиков
Member

Откуда: Санкт-Петербург
Сообщений: 68
Niarah
...
все эти поля являются не обязательными.. значит если их не задали то скалярной переменной в Хранимой процедуре должно быть значение по умолчанию такое, которые бы удовлетворяла любому значению.

какое установить значение по умолчанию... я порылся в интернете видел пару способов, но все они не работают... Так что прошу помощи )
Знаю что можно сделать кучу процедур каждая под конкретно ситуацию... Но хотелось бы узнать способ решения с одной процедурой без select Case или IF then


можно использовать два варианта:
1. создавать динамический запрос, в зависимости от переданных параметров;
2. использовать case в секции where, например:
@var = '*' 
select bla-bla-bla 
from dbo.table 
where case @var when '*' then '*' else dbo.table.fields_var end = @var 
14 мар 14, 09:29    [15721825]     Ответить | Цитировать Сообщить модератору
 Re: значение по умолчанию в хранимой процедуре  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6149
http://technet.microsoft.com/en-us/library/ms189260.aspx , раздел Specifying Parameter Names
create procedure dbo.up_test(
  @first int=123,
  @second varchar(10)='ABCDEF',
  @third datetime='20140101'
)
as select @first first, @second second, @third third;

exec dbo.up_test @first=10;
exec dbo.up_test @second='foo';
exec dbo.up_test @third='20000101';
exec dbo.up_test @third='20000101', @first=0;
14 мар 14, 09:30    [15721835]     Ответить | Цитировать Сообщить модератору
 Re: значение по умолчанию в хранимой процедуре  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2397
Niarah
без select Case или IF then


вот откуда? откуда вы эти ограничения берете?
постоянно на форуме "знатоки, помогите! хочу собрать велосипед. без использования круглых колес"
14 мар 14, 09:40    [15721866]     Ответить | Цитировать Сообщить модератору
 Re: значение по умолчанию в хранимой процедуре  [new]
Niarah
Member

Откуда:
Сообщений: 2
StarikNavy,

Нуу велосипед изобретать не хочу..
Почему не хочу использовать select case или IF потому что с ними я знаю как это сделать.
Можно еще предложить создать под каждую ситуацию свою процедуру ведь Select case именно это и будет делать.
если Case 1 то сделай это
если Case 2 то сделай другое.

я именно спрашивал есть ли какое-то значение переменной которое будет равна любому значению.
как например '*' или All

Например

SELECT dbo.Suprvisor.SVFio
FROM dbo.Suprvisor
Where dbo.Suprvisor.SuperVisorKey = dbo.Suprvisor.SuperVisorKey

в этом запросе он мне выдаст все записи в базе dbo.Supervisor не смотря на то что есть Where
скажите почему же я так не сделал в своем запросе.
ответ прост.
1) @Super VarChar = dbo.Suprvisor.SVFio Подчеркивает первую точки и говорит что не правильный знак.
так как ему нужно конкретное значение а не адрес таблицы
2) @StDate Date = 'dbo.Discipline.dateCreate' если ставить в ковычки то, 1) работать не будет 2) ТИП дата не может содержать Стринг.

еслиб мне нужен был простой способ ) это одно. Но как по стандартному сделать я знаю..
Хочу узнать есть ли вариант проще!
не городить кучу запросов в запросе и потом перебирать их через select case

А так
@1 VarCHar = Anything
@2 Date = Anything

и если эти переменные не указаны то по умолчанию они удовлетворяют любое значение и выдадут все записи в базе
14 мар 14, 10:14    [15722070]     Ответить | Цитировать Сообщить модератору
 Re: значение по умолчанию в хранимой процедуре  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8488
ФИО Сотрудника - это неверно, т.к. ФИО не является атомарным с любых точек зрения. Должно быть Ф, И, О отдельно.

По теме:

автор
@Super VarChar(200) = 'dbo.Suprvisor.SVFio',

Where dbo.Suprvisor.SuperVisorKey = isnull(@Super , dbo.Suprvisor.SuperVisorKey)
14 мар 14, 13:06    [15723350]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить