用于基于emailid或userid检索数据的SQL查询

时间:2017-01-20 05:28:15

标签: sql sql-server stored-procedures type-conversion

我必须为登录页面编写查询,用户可以在其中输入emailid(varchar数据类型)或userid(int数据类型)。如何在不知道输入的数据类型的情况下为此编写查询?

3 个答案:

答案 0 :(得分:1)

CREATE PROCEDURE my_stored_procedure   
@emailId nvarchar(50) = NULL,   
@userId int = NULL
AS   

SET NOCOUNT ON;  
IF (@emailId IS NOT NULL) AND (LEN(@emailId) > 0)
    SELECT * FROM MYTABLE WHERE EmailId = @emailId
ELSE
    SELECT * FROM MYTABLE WHERE UserId = @UserId
GO

答案 1 :(得分:0)

您的输入参数应为varchar类型。 然后在您的过程中使用ISNUMERIC函数来检查数字。如果是intvarchar,则根据IF语句进行两次查询。

DECLARE @userInput VARCHAR(50)
IF ISNUMERIC(@userInput) = 1 
BEGIN
-- Your query with userid
END
ELSE
BEGIN
-- Your query with emailid
END

答案 2 :(得分:0)

尝试此查询可能会对您有所帮助。

 DECLARE @emailid varchar(250),@userid bigint
 set @emailid='A' 
 SET @userid=3

 select * from yourtable 
 where case when @emailid='A' THEN 'A' ELSE emailid END=@emailid
 AND  case when @userid=0 THEN 0 ELSE userid END=@userid

注意:您应该通过' A'作为email_id的默认值,对于userid为0,否则您可以传递所需的输入