现有一思想理论库,里面有七到八个表,分别对于于理论_日本、理论_美国,每个表的字段都是相同的,分别为ID、文件标题(varchar)、文件摘要(varchar)、文件(varbinary(MAX)),如何遍历所有表查询含有某个关键词的记录?也就是说,输入一个关键词查询,只要这几个字段中内容含有这个关键词则显示该条记录。
还有varbinary与image有何区别?以前对image数据类型写过全文检索代码,不知varbinary类型是否与之相同?
对varbinary类型全文检索时是否需要像image类型的一样,要加一个数据类型的字段?
求高手指点

解决方案 »

  1.   


    varbinary [ ( n ) ]n 个字节变长二进制数据。n 必须从 1 到 8,000。存储空间大小为实际输入数据长度 +4 个字节,而不是 n 个字节。输入的数据长度可能为 0 字节。在 SQL-92 中 varbinary 的同义词为 binary varying。image可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间
      

  2.   

    select * from 思想理论库..理论_日本 where charindex('关键词',文件标题)>0 or charindex('关键词',文件摘要)>0 ...
    union all
    ...
    union all
    select * from 思想理论库..理论_美国 where charindex('关键词',文件标题)>0 or charindex('关键词',文件摘要)>0 ...
      

  3.   

    --求test库中包含值为@value的表和列名--存储表名和列名
    IF object_id('tabss') IS NOT NULL 
    exec('drop table tabss')
    CREATE TABLE Tabss(id int identity(1,1),tabname varchar(100),colName varchar(100))--查询某表某列是否包含某个值
    IF object_id('ysgs') IS NOT NULL
    exec('drop proc ysgs')
    exec('create PROC ysgs(@tab varchar(100),@col varchar(100))
    AS
    exec(''select 1 from ''+@tab+'' where ''+@col+'' like ''''%'+@value+'%'''''')')--将结果存入tabss表中
    EXEC master.dbo.xp_execresultset 'SELECT ''exec ysgs ''''''+object_name(id)+'''''',''''''+name+'''''';if @@rowcount>0  insert tabss (colname,tabname)values(''''''+name+'''''',''''''+object_name(id)+'''''')'' FROM syscolumns s WHERE xtype in(SELECT xtype FROM systypes s2 WHERE name in(''char'',''varchar'',''nchar'',''nvarchar''))
    AND id in(SELECT id FROM sysobjects s2 WHERE xtype=''u'')',N'test'
    GO
    /*调用
    exec xb_GetTableNameAndColNameForValue 'aa_1'
    SELECT * FROM tabss
    */
      

  4.   

    刚才看了大家给的思路,有一些启示,但还不是很明了。现有一思想理论库,里面有七到八个表,分别是理论_日本、理论_美国,每个表的字段都是相同的,分别为ID、文件标题(varchar)、文件摘要(varchar)、文件(varbinary(MAX))
    如何遍历所有表查询含有某个关键词的记录?也就是说,输入一个关键词查询,只要这几个字段中内容含有这个关键词则显示该条记录。对于这个查询请高手指点思路?最好能有一段代码提示,不胜感激。由于有两种数据类型(varchar,varbinary),这种如何做?
      

  5.   

    查询 4 楼给出了答案 用union all。
    后面一个期待高手解答
      

  6.   

    如果有50个表,那么union all语句会很长,因为每个表的字段都是相同的,有没有简洁的方法?