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

Откуда:
Сообщений: 12
Добрый день, уважаемые знатоки!

Буду признателен, если ответите на следующий вопрос.

Имеется функция, которая в зависимости от того, задан ли параметр @P(varchar, readonly), выполняет различные действия. Дело в том, что в качестве @P, вопреки моим ожиданиям, NULL или пустая строка НЕ передаются в том случае, если этот параметр @P не задан.
13 июл 11, 09:48    [10965696]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Crypto90,

где скрипты?
13 июл 11, 09:50    [10965703]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Crypto90
Member

Откуда:
Сообщений: 12
Скрипт располагается в Programmability -> Stored Functions

ALTER PROCEDURE [dbo].[table]
@P as varchar(1000)
AS
BEGIN
.....
13 июл 11, 09:56    [10965725]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Crypto90
Member

Откуда:
Сообщений: 12
Вопрос в том, как проверить, передан ли параметр @P в функцию
13 июл 11, 09:57    [10965734]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Crypto90
Скрипт располагается в Programmability -> Stored Functions

ALTER PROCEDURE [dbo].[table]
@P as varchar(1000)
AS
BEGIN
.....
Где скрипты, подтверждающие то, что Вы написали в стартовом сообщении? Вот это Ваше "НЕ", например.
Они должны быть написаны здесь, в этой теме, вообще-то.
Ваши "Programmability -> Stored Functions" - это неинтересно.
13 июл 11, 10:13    [10965806]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Crypto90,

даже непонятно, о чём Вы спрашиваете.
Ведь при вызове функции Вы не можете пропускать параметры,
а обязаны задать их все. Пусть даже словом DEFAULT.
13 июл 11, 10:23    [10965860]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
А в чем проблема???


--create type MyType as table (id int, name nvarchar(50))

if OBJECT_ID ('sp_MySproc') is not null
	drop procedure sp_MySproc
go
CREATE PROCEDURE sp_MySproc(@params MyType READONLY) 
as
if (select COUNT(*) from @params) >0
	select * from @params
else
	print 'Нет записей'
	RAISERROR('Нет записей', 18, 127);  

go


declare @params  MyType 
insert into @params values (1,'Один'),  (2,'Два')
exec sp_MySproc @params
go
declare @params1  MyType 
exec sp_MySproc @params1

13 июл 11, 10:24    [10965868]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Crypto90
Скрипт располагается в Programmability -> Stored Functions

ALTER PROCEDURE [dbo].[table]
@P as varchar(1000)
AS
BEGIN
.....
То Вы говорите про функцию, то пишете текст процедуры...
Это что, одно и то же, да?
13 июл 11, 10:24    [10965869]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Crypto90
Member

Откуда:
Сообщений: 12
Сейчас работает успешно следующий код в процедуре:

IF @P in ('2', '3', '4')
BEGIN
----
END
ELSE
BEGIN
----
END

Сейчас всё работает: Если @P не задан, срабатывает код в ELSE.

Если я обращаюсь к этому параметру, то сценарий сворачивает свою работу. Поэтому нет возможности проверять наличия @P в таблице перечисления "правильных" @P. Но если написать IF @P='2' или IF @P in ('2', '3', '4'), то всё работает.
Если же использовать проверку @P IS NOT NULL или проверку @P != '', возникает ошибка и сценарий останавливается.

Не могу ведь я перечислять все возможные @P в скобках, т.к. их много и они могут меняться. Должна быть какая-то проверка наподобие EXISTS или ISSET, скорее всего..
13 июл 11, 10:27    [10965890]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Если же использовать проверку @P IS NOT NULL или проверку @P != '', возникает ошибка и сценарий останавливается.

у этой ошибки, наверное, есть номер и текст?

Posted via ActualForum NNTP Server 1.4

13 июл 11, 10:29    [10965904]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Crypto90
Member

Откуда:
Сообщений: 12
Вообще в качестве @P передаётся пустая строка, но он её не воспринимает.
Я решил проблему для себя тем, что если в сценарии не передаётся @P, то передаётся @I as int - с ним уже всё гладко :)
13 июл 11, 10:32    [10965925]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Crypto90
Вообще в качестве @P передаётся пустая строка, но он её не воспринимает.
Я решил проблему для себя тем, что если в сценарии не передаётся @P, то передаётся @I as int - с ним уже всё гладко :)


Что значит пустая строка????
я так понял вы передаете табличную переменную в качестве параметра?
13 июл 11, 10:34    [10965945]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Crypto90
Member

Откуда:
Сообщений: 12
я не умею смотреть номер ошибки в процедуре - это критическая ошибка и не могу посмотреть её номер
я бы отключил остановку из-за ошибок на этот отрывок сценария, после чего поставил бы проверку - если errorcode=0, то выполнять одно, если нет - другое.
13 июл 11, 10:34    [10965947]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Crypto90
я не умею смотреть номер ошибки в процедуре - это критическая ошибка и не могу посмотреть её номер
я бы отключил остановку из-за ошибок на этот отрывок сценария, после чего поставил бы проверку - если errorcode=0, то выполнять одно, если нет - другое.
Используйте Profiler
13 июл 11, 10:36    [10965957]     Ответить | Цитировать Сообщить модератору
 Re: проверка заданности параметра функции  [new]
Crypto90
Member

Откуда:
Сообщений: 12
Благодарю за помощь, буду учиться использовать Profiler
А так проблему решил передачей параметра INT - с ним вроде всё работает :)
13 июл 11, 10:59    [10966132]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить