CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

巨难!!有关动态查询,急死了,高手快来!!

楼主xiaoxiaowang(小小)2003-06-02 19:48:46 在 MS-SQL Server / 基础类 提问

有一个表trafficinfo  
  CREATE   TABLE   [TrafficInfo]   (  
                                      iDownComputerID   int,  
  iCameraID   int,  
  tDectDate   datetime,  
  iTrafficFlow   int,  
  iVehicleSpeed   int)  
  因为数据太多,将它每个月的数据组成一个表,例如trafficinfo20036(2003为年份,6为月份),现在做一个查询,比如得到2003年3月4日的数据,  
  create   proc   chaxun  
    @starttime   datetime,  
    @endtime   datetime,  
    @tablename   varchar(20)  
  as  
  create     proc   dbo.ziquery  
   
    @tablename   varchar(20),  
    @starttime   datetime,  
    @endtime   datetime  
   
  AS  
  begin  
  exec('insert   into   table1   '+  
            'select   idowncomputerid,icameraid,   '+  
                  @starttime+','+  
  '   sum(itrafficflow),'+  
  '   avg(ivehiclespeed)'+  
          'from   '+   @tablename+  
          'where   tdectdate>='+@starttime+  
  '   and'+  
                '   tdectdate<='+@endtime+  
        '   group   by   idowncomputerid,icameraid')  
  end  
  执行查询过程  
  exec   chaxun  
  @tablename='trr',  
  @starttime='2003-3-4   10:00:00',  
  @endtime='2003-3-4   20:00:00'  
  但总得到错误  
  服务器:   消息   170,级别   15,状态   1,行   1  
  第   1   行:   '4'   附近有语法错误。  
  我试了很多次,若将表名作为变量做动态查询时,若再有一个别的变量做查询条件就会出错,是不是因为将表名做变量时由于表是未知的,所以不能这么写呀,那我要想随机查某天的纪录应该怎么写存储过程呀???  
  问题点数:50、回复次数:10Top

1 楼sasacat(傻傻猫)回复于 2003-06-02 19:52:30 得分 10

exec('insert   into   table1   '+  
            'select   idowncomputerid,icameraid,   '''+  
                  @starttime+''','+  
  '   sum(itrafficflow),'+  
  '   avg(ivehiclespeed)'+  
          'from   '+   @tablename+  
          '   where   tdectdate>='''+@starttime+  
  '''   and'+  
                '   tdectdate<='''+@endtime+  
        '''   group   by   idowncomputerid,icameraid')Top

2 楼cxingh()回复于 2003-06-02 20:02:29 得分 0

upTop

3 楼pengdali()回复于 2003-06-02 20:24:22 得分 0

create     proc   dbo.ziquery  
   
    @tablename   varchar(20),  
    @starttime   datetime,  
    @endtime   datetime  
   
  AS  
  begin  
  exec('insert   into   table1   '+  
            'select   idowncomputerid,icameraid,   '''+   @starttime+''','+  
  '   sum(itrafficflow),'+  
  '   avg(ivehiclespeed)'+  
          'from   '+   @tablename+  
          'where   tdectdate>='''+@starttime+'''   and   '+  
                '   tdectdate<='''+@endtime+'''   group   by   idowncomputerid,icameraid')  
  endTop

4 楼happydreamer(www.sz.js.cn,www.gyxk.com)回复于 2003-06-02 21:37:03 得分 20

 
  create     proc   dbo.ziquery  
   
    @tablename   varchar(20),  
    @starttime   datetime,  
    @endtime   datetime  
   
  as  
  begin  
   
  exec   ('insert   into   table1   select   idowncomputerid,icameraid,   '''+   @starttime+''',   sum(itrafficflow),   avg(ivehiclespeed)  
          from   '+   @tablename+'   where   tdectdate>='''+@starttime+'''   and     tdectdate<='''+@endtime+'''  
          group   by   idowncomputerid,icameraid')  
   
  endTop

5 楼xiaoxiaowang(小小)回复于 2003-06-03 09:02:41 得分 0

小黑说得对,可是为什么这么写?我看不懂  
  为什么有的变量前边要多加个'',有的就不用  
  这个在帮助里能找到吗?Top

6 楼psxfghost(哈哈)回复于 2003-06-03 09:55:55 得分 10

在sql字串中,两个连续的单引号代表一个单引号!  
  在帮助里可以查得到Top

7 楼xiaoxiaowang(小小)回复于 2003-06-03 10:24:32 得分 0

还有啊  
  为什么存储过程  
  create     proc   dbo.ziquery111  
   
    @tablename   varchar(20),  
    @starttime   datetime,  
    @endtime   datetime  
   
  as  
  begin  
  exec('insert   into   table1   select   *    
  from   '+   @tablename+'   where   tdectdate>='''+@starttime+'''   and   tdectdate<='''+@endtime+'''  
  and   1=1')  
   
  end  
  执行  
  exec   ziquery111  
  @tablename='table2',  
  @starttime='2003-5-30   2:00:00',  
  @endtime='2003-5-30   20:00:00'  
  在SQL   Server2000中完全正确,在sql   server7里就会出现错误  
  Syntax   error   converting   datetime   from   character   string.  
   
  Top

8 楼pengdali()回复于 2003-06-03 10:32:44 得分 10

create     proc   dbo.ziquery111  
   
    @tablename   varchar(20),  
    @starttime   datetime,  
    @endtime   datetime  
   
  as  
  begin  
  declare   @a   varchar(8000)  
  set   @a='insert   into   table1   select   *   from   '+   @tablename+'   where   tdectdate>='''+@starttime+'''   and   tdectdate<='''+@endtime+''''  
   
  exec(@a)  
  endTop

9 楼xiaoxiaowang(小小)回复于 2003-06-03 10:46:10 得分 0

大力的方法也对  
  但我现在想知道  
  为什么相同的这段程序  
  在sql   server2000下完全正确,  
  在sql   server7下就不行了呢?  
  大力的这段程序在sql   server7下也出现错误  
  服务器:   消息   241,级别   16,状态   1,过程   ziquery1111,行   10  
  Syntax   error   converting   datetime   from   character   string.Top

10 楼wangyanqiu(*我要我的音乐*)回复于 2003-06-03 11:33:31 得分 0

upTop

相关问题

  • 查询问题,我急死啦
  • 动态查询
  • 动态查询
  • 动态查询
  • 请问有关动态查询的问题,急
  • iBATIS动态查询
  • 有关查询
  • 如何动态设置实例名,急死了..
  • 关于动态查询
  • 动态查询数据库。

关键词

  • 数据
  • tdectdate
  • starttime
  • datetime
  • tablename

得分解答快速导航

  • 帖主:xiaoxiaowang
  • sasacat
  • happydreamer
  • psxfghost
  • pengdali

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo