Как я могу узнать, что параметр в процедуре имеет varchar в SQL - PullRequest
0 голосов
/ 28 апреля 2019

Я хотел бы распознать свой параметр (который отправляется моим Приложением) в моей процедуре.

Всякий раз, когда он содержит varchar или просто целочисленное значение, и из-за этого предложения where записи

alter procedure x
    @NumStr as varchar(50)
as 
    Select * 
    From y
    Where ...

Я бы хотел сделать это, но я не знаю, как в предложении where:

(if @numstr contains Varchar then numstr = @Numstr
and if @numstr contains just Integer  then serial = @Numstr)

Ответы [ 3 ]

0 голосов
/ 28 апреля 2019

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

select a.name AS ParamName ,s.name AS TypeName
from sys.procedures p 
        join sys.all_parameters a on p.object_id=a.object_id
        join sys.systypes s on s.xtype=a.system_type_id
where p.name ='SpName'

но я бы предпочел использовать @Arulkumar или использовать 2 параметра, как @Larnu говорит

0 голосов
/ 30 апреля 2019

Иногда этот параметр @NumStr имеет строковое значение, а иногда целое число Всякий раз, когда это строка из-за бизнес-уровня, ему также обязательно нужны другие не нулевые столбцы поэтому я буду иметь:

alter procedure x
   @NumStr as varchar(50),
   @date as udate,
   @contactCode as int
as
    select  * from y
    where (Reg = @NumStr  )
    or ( NumStr = @NumStr and date = @date and  contactCode = @contactCode )


p.s: reg is an integer Field 
0 голосов
/ 28 апреля 2019

Вы можете использовать TRY_PARSE. Если входным параметром является varchar, он будет возвращаться NULL, поэтому на основе этого вы можете обрабатывать блоки IF ELSE.

Так процедура будет:

ALTER PROCEDURE X
( @NumStr VARCHAR (50) )
AS
BEGIN

   DECLARE @InputValidator AS INT = NULL;
   SELECT @InputValidator = TRY_PARSE(@NumStr AS INT);

   IF (@InputValidator IS NULL)
   BEGIN
      SELECT * 
      FROM Y
      WHERE numstr = @Numstr
   END
  ELSE
   BEGIN
      SELECT * 
      FROM Y
      WHERE serial = @Numstr -- in case if you are recive any error change this line to " WHERE serial = CAST(@Numstr AS INT) "
  END
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...