如何用SQL语句全局搜索

xzf_fancy 2011-03-10 05:16:54
例如:我有表AAA如下,列名为a b c,列内容如下:

a b c
aa bb cc
dd aa dd
cc bb dd

现在我想搜索出值为aa的行,结果为:
aa bb cc
dd aa dd

或者是值为bb的行,结果为:
aa bb cc
cc bb dd

因为一般搜索都要指定列,也就是a=aa,b=aa这样,如果全局搜索的话,应该怎么写呢?
...全文
765 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljking0731 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xzf_fancy 的回复:]
引用 11 楼 ljking0731 的回复:

SQL code
--字段数动态编号,且表的字段值都是varchar时,可以这么做,以查值aa为例
set nocount on
declare @FielsStr varchar(1000),@Sql varchar(1000)
set @FielsStr=''
select @FielsStr=@FielsStr+name+'+'……
[/Quote]


--改下里面这句就好了
select @FielsStr=@FielsStr+'cast(isnull('+name+','''') as varchar)+'',''+' from syscolumns where id=object_id('表AAA')

xzf_fancy 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ljking0731 的回复:]

SQL code
--字段数动态编号,且表的字段值都是varchar时,可以这么做,以查值aa为例
set nocount on
declare @FielsStr varchar(1000),@Sql varchar(1000)
set @FielsStr=''
select @FielsStr=@FielsStr+name+'+'',''+' from syscolumns where ……
[/Quote]

我试试,然后一个更复杂的疑问,我的列是有int类型,char类型 ,date类型等等,那我程序用的时候,我输入的不同的值,会不会出什么问题,转换不了值之类的。
ljking0731 2011-03-11
  • 打赏
  • 举报
回复
--字段数动态编号,且表的字段值都是varchar时,可以这么做,以查值aa为例
set nocount on
declare @FielsStr varchar(1000),@Sql varchar(1000)
set @FielsStr=''
select @FielsStr=@FielsStr+name+'+'',''+' from syscolumns where id=object_id('表AAA')

select @FielsStr=substring(''',''+'+@FielsStr,1,len(@FielsStr)+3),
@sql='select * from 表AAA where charindex('',aa,'','+@FielsStr+')>0'

exec(@sql)

上面整段语句可以放在SelectCommand="..."里面执行,不会影响程序

xzf_fancy 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fcuandy 的回复:]

引用 6 楼 ljking0731 的回复:
--如果要查'aa'
select * from 表AAA where charindex('aa',a+b+c)>0



a列有个'a', b列也只有一个'a', 拼起来不就是'aa'了, 但是这条记录合条件吗

稍改一下。

SQL code
select * from 表AAA where charindex('aa',……
[/Quote]

你们的这种写法,如果数据库表变了,增加了字段或减少了字段,还是要去改程序里的SQL语句,看来是难有不出现字段名的语句了。
DEATH64 2011-03-11
  • 打赏
  • 举报
回复
select * from table where a='aa'
union
select * from table where b='aa'
ljking0731 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fcuandy 的回复:]
引用 6 楼 ljking0731 的回复:
--如果要查'aa'
select * from 表AAA where charindex('aa',a+b+c)>0



a列有个'a', b列也只有一个'a', 拼起来不就是'aa'了, 但是这条记录合条件吗

稍改一下。


SQL code
select * from 表AAA where charindex('aa'……
[/Quote]

恩恩,忘了
fcuandy 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ljking0731 的回复:]
--如果要查'aa'
select * from 表AAA where charindex('aa',a+b+c)>0

[/Quote]

a列有个'a', b列也只有一个'a', 拼起来不就是'aa'了, 但是这条记录合条件吗

稍改一下。

select * from 表AAA where charindex('aa',a+','+b+','+c)>0
ljking0731 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xzf_fancy 的回复:]
引用 4 楼 ljking0731 的回复:

SQL code

--当不知道表的字段数,且表的字段值都是varchar时,可以这么做,以查值aa为例
declare @FielsStr varchar(1000),@Sql varchar(1000)
set @FielsStr=''
select @FielsStr=@FielsStr+'+'+name from syscolu……
[/Quote]

那就简单点的
--如果要查'aa'
select * from 表AAA where charindex('aa',a+b+c)>0
xzf_fancy 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ljking0731 的回复:]

SQL code

--当不知道表的字段数,且表的字段值都是varchar时,可以这么做,以查值aa为例
declare @FielsStr varchar(1000),@Sql varchar(1000)
set @FielsStr=''
select @FielsStr=@FielsStr+'+'+name from syscolumns where id=object_id('表AAA……
[/Quote]

你的语句太复杂,编写到应用程序里不方便,我是想设置SelectCommand="...",你的语句我都不知道怎么编进去,希望下个SQL语言版本能有这个全局搜索的语句来。
ljking0731 2011-03-10
  • 打赏
  • 举报
回复

--当不知道表的字段数,且表的字段值都是varchar时,可以这么做,以查值aa为例
declare @FielsStr varchar(1000),@Sql varchar(1000)
set @FielsStr=''
select @FielsStr=@FielsStr+'+'+name from syscolumns where id=object_id('表AAA')

select @FielsStr=substring(@FielsStr,2,len(@FielsStr)),
@sql='select * from 表AAA where charindex(''aa'','+@FielsStr+')>0'

exec(@sql)
ljking0731 2011-03-10
  • 打赏
  • 举报
回复

--如果要查'aa'
select * from 表AAA where charindex('aa',a+b+c)>0
xzf_fancy 2011-03-10
  • 打赏
  • 举报
回复
这样or太长了吧,有没有简单的语法?我用SQL2008的。
唵嘛呢叭咪吽 2011-03-10
  • 打赏
  • 举报
回复
or
不够长啊不够长

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧