巨难!!有关动态查询,急死了,高手快来!!
有一个表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




