SQL如果在内部查询字符串中有其他内容

时间:2017-07-17 08:01:34

标签: sql sql-server

可以这样做吗?

"SELECT * FROM account WHERE if(@dropdownsearch) = 'ID' then id=@id else name=@name"

因为我不能在查询字符串之外的其他地方因为这个:

cmd.Parameters.AddRange(queryParams.ToArray());

请帮助

2 个答案:

答案 0 :(得分:4)

使用AND/OR逻辑

SELECT * 
FROM account 
WHERE (@dropdownsearch = 'ID' and id=@id) 
   or name=@name

答案 1 :(得分:0)

如果我理解你的困境,你有一个下拉列表,用户可以选择是否搜索ID或名称。现在你需要传递一个或另一个,而不是两个,正确吗? 我以前使用以下逻辑使用多个下拉选项完成此操作:

SELECT * FROM account 
WHERE
  (CASE WHEN @dropdownsearch = 'ID' then @id else ID END) = ID,
  (CASE WHEN @dropdownsearch = 'Name' then @name else name END) = name

所以这里发生的是,如果他们选择了ID,那么它会将你的@id参数中的值与ID的值进行比较。同时它会将名称与自身进行比较。 (姓名)Hanzou =(姓名)Hanzou总是如此,所以名字中的每个值都会传递,@ name将被忽略。 如果用户选择“名称”而不是“ID”

,则相反