3

ストアド プロシージャにパラメータが渡されない場合は、すべての結果が返されます。

いずれかのパラメーターを渡すと、パラメーターに従って値が表示されます

alter proc SearchEmployee --'','','',''
    @Name varchar(50)=null,
    @Age int=null,
    @Gender varchar(50)=null,
    @Email varchar(50)=null
as
begin

    declare @sql varchar(max), @sqlwhere varchar(max)
    set @sqlwhere = ''; 

    set @sql = 'select * from employee' 

   if ((@Name is not null) and @Name <> '')
   begin
      set @sqlwhere=' Name='+ @Name 
   end
   else if ((@Age is not null) and @Age <> '')
   begin
      set @sqlwhere='and Age='+ cast(@Age as varchar(50)) 
   end
   else if ((@Email is not null) and @Email <> '')
   begin
      set @sqlwhere=' and email='+ @Email
   end
   else if ((@Gender is not null) and @Gender <> '')
   begin
       set @sqlwhere=' and Gender='+ @Gender
   end

   if (@sqlwhere <> '')
   begin
       set @sql = @sql + ' where ' + @sqlwhere;
   end
   else
   begin
        set @sql = @sql;
   end

   print @sql
   exec (@sql) 
end

employeeテーブル

Name    Age Gender  email
anurag  24  Male    anu@gmail.com
abhi    22  Male    abhi@gmail.com
ruchi   23  Female  ruchi@gmail.com
siba    24  Male    siba@gmail.com
mukua   24  Male    mukua@gmail.com
prachi  24  Female  prachi@gmail.com
preeti  24  Female  preeti@gmail.com

実行中

SearchEmployee '','','',''

すべての結果を教えてくれます。

しかし、以下を実行するとエラーが発生します

SearchEmployee 'anurag','','',''`

select * from employee where  Name=anurag

エラー:

メッセージ 207、レベル 16、状態 1、行 1
列名 'anurag' が無効です。

クエリを変更するのを手伝ってください。そして、私はどこで間違っていますか?

4

2 に答える 2