目的:有两个表,一个叫 fault_info,用于存储故障发生时间及故障发生源。另一个表record_msg,用于存储故障名称。现在要用发生时间(fault_info.time_ymd)、故障发生源(fault_info.fault_from)和故障名称(record_msg.record_name)这三个条件作为查询条件并把结果显示出来。我创建了一个存储过程,代码如下:CREATE PROCEDURE AllconFault
   @time_begin char(20) , @time_end char(20), @Commd01 char(20), @Commd02 char(20)AS
IF object_id('tempdb..##AllconFault') is not NULL
DROP TABLE ##AllconFaultSELECT S.*,T.record_name, 'RowOrder'=Identity(int,1,1) 
INTO ##AllconFault FROM( fault_info AS S INNER JOIN record_msg AS TON S.fault_type=T.record_type AND time_ymd BETWEEN @time_begin AND @time_endAND record_name LIKE @Commd01
AND fault_from  IN ( @Commd02)
)ORDER BY S.ID ASC
GO
//////////////////////////////////////////////查询分析器检测代码如下:EXEC AllconFault '2011-08-01','2011-08-31','%过流','A9功率单元'SELECT * 
FROM ##AllconFaultORDER BY ##AllconFault .ID ASC //////////////////////////////////////////////////////
发现第三个参数不管是采用通配符还是直接字符,查询结果都为0
如果在存储过程把AND record_name LIKE @Commd01
更换为
AND record_name IN ( @Commd01)后查询结果正确,但是不能用模糊查询语句。问题:现在是想把表的模糊查询结果复制到临时表,比如用通配符查询更多结果。现在是不能采用模糊查询语句。
求助!!
SQL刚入门,呵呵

解决方案 »

  1.   

    fault_info:ID  time_ymed  time_hms  fault_type  fault_from  .........
    record_msg:ID  record_type  record_name  record_event  .........
    我创建临时表时加了一个'RowOrder'列,产生连续ID,用此ID作为显示用,因为查询结果本身ID不一定是连续的。
      

  2.   

    楼上的好犀利啊
    这两个表之间是有联系的,为了后续的扩展和通讯协议的开发,把信息拆到两个表里头。在存储过程中,有S.fault_type=T.record_type  这两个表的fault_type和record_type 是一致的而且也是唯一的。
      

  3.   

    有两个故障类型,fault_type和event_type,他们都和record_msg中的record_type 是一致的而且也是唯一的。这样做是方便通讯程序的设计。而且在RECORD_MSG表中有对故障和警告的更详细分分析报告,这样我只要管理RECORD_MSG就可以了
      

  4.   

    呵呵...
    没有冒犯的意思,嘿嘿...你的问题出在变量的数据类型上,试试:
    CREATE PROCEDURE AllconFault
      @time_begin varchar(20) , @time_end varchar(20), @Commd01 varchar(20), @Commd02 varchar(20)
    AS
    SELECT S.*,T.record_name
    FROM fault_info AS S INNER JOIN record_msg AS T
    ON S.fault_type=T.record_type  
    WHERE S.time_ymd BETWEEN @time_begin AND @time_end
    AND T.record_name LIKE @Commd01
    AND fault_from=@Commd02
    ORDER BY S.ID ASC
    GO
    执行时只要
    EXEC AllconFault '2011-08-01','2011-08-31','%过流','A9功率单元'
    就能获得结果集,用不着以全局临时表转换