我正在尝试创建一个存储过程来验证输入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
如何整理验证这些条件?
答案 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