SQL where子句,带有一个参数来检查int或string字段

时间:2016-11-08 13:37:13

标签: sql tsql stored-procedures sql-server-2012

我有这个存储过程:

ALTER PROCEDURE [dbo].[getClassInfo](@ClassId int)
AS
BEGIN
    SELECT [usergroupId]
      ,[gName]
        ,[accessCode]
  FROM [dbo].[usergroup]
  where usergroupid = @ClassId OR accessCode = @ClassId
END

现在,我希望我发送的参数检查usergroupId是一个数字还是accessCode这是一个字符串。

使用一个参数检查这两种情况,哪种解决方案无痛苦?

1 个答案:

答案 0 :(得分:1)

您的参数中不能包含整数值,因此已更改为varchar。

Alter Procedure [dbo].[getClassInfo] ( @ClassId Varchar(50) )
As
    Begin
        If IsNumeric(@ClassId + '.0e0') = 1
            Begin
                Declare @ClassIdInt Int = Convert(Int , @ClassId);

                Select  [usergroupId]
                      , [gName]
                      , [accessCode]
                From    [dbo].[usergroup]
                Where   @ClassIdInt = [usergroupid];
            End; 
        If IsNumeric(@ClassId + '.0e0') = 0
            Begin
                Select  [usergroupId]
                      , [gName]
                      , [accessCode]
                From    [dbo].[usergroup]
                Where   [accessCode] = @ClassId;
            End;
    End;

if语句确定传递的值是否为整数,然后运行相应的查询