我试图创建一个存储过程来验证输入整数

时间:2014-09-24 17:51:24

标签: sql sql-server tsql stored-procedures

我正在尝试创建一个存储过程来验证输入INT是否具有最大15位且第一位不是0.

现在我有了这个:

CREATE PROCEDURE usp_verify_phone_numbers (@phone_number INT)
AS
   IF @phone_number > 15
   BEGIN
        PRINT 'Not ok'
   END
   ELSE PRINT 'OK'

   DECLARE @fld_id INT

   SET @fld_id = (SELECT LEFT(@phone_number, 1)

   DECLARE @result CHAR(25)

   SET @result = CASE 
                   WHEN @fld_id  > 0 
                     THEN 'OK'
                   ELSE 'Not OK'
END

PRINT @result

如何整理验证这些条件?

2 个答案:

答案 0 :(得分:1)

因为你的输入参数是int数据库会消除前导0,所以你对@fld_id的检查总会返回OK。

CREATE PROCEDURE usp_verify_phone_numbers (@phone_number nvarchar(100))
AS
DECLARE @longerthanfifteen int = 0, @startswithzero int = 0
  IF LEN(@phone_number) > 15
  BEGIN
      SET @longerthanfifteen=1
  END

IF LEFT(@phone_number,1)='0'
BEGIN
   SET @startswithzero=1
END

SELECT 
CASE WHEN @longerthanfifteen + @startswithzero > 0 
then 'Not OK' ELSE 'OK' END as Result
END

但我同意上面的评论,这可能不属于SQL服务器,而是作为输入表单中的验证

答案 1 :(得分:1)

使用OUTPUT参数获取传递值的通过或失败状态,也使用BIT值,如1表示Pass,0表示失败。

此外,您使用Int数据类型存储数字,INT数据类型不能容纳15个整数长值。

CREATE PROCEDURE usp_verify_phone_numbers 
   @phone_number BIGINT  --<-- Int cannot hold 15 interger values
  ,@Result BIT OUTPUT
AS
BEGIN
  SET NOCOUNT ON;

    IF (LEN(@phone_number) <= 15) 
     BEGIN
       SET @Result = 1;  --<-- OK 
     END
    ELSE 
     BEGIN
       SET @Result = 0;  --<-- Not OK 
     END
END

调用程序

DECLARE @Result_Rnt BIT
EXECUTE usp_verify_phone_numbers @phone_number = 1234567812
                                 ,@Result = @Result_Rnt OUTPUT
SELECT @Result_Rnt