还请高手指点下,这是一个数据库查询
Set @sTmpDate=@p1BgnDate
While Left(@sTmpDate,7) <=Left(@p2EndDate,7)
Begin
If Exists(Select Name from SysObjects where name='pfSale'+Left(@sTmpDate,4)+SubString(@sTmpDate,6,2)
and XType='U')
。。。。。。
End
Set @sTmpDate=Convert(Varchar(10),DateAdd(Month,1,@sTmpDate),120)
----原数据库中有pfsaleyyyymm按日期生成的表, @p1bgndate是手动选择的日期
这几句是什么意思我不是非常明白,还请高手解释下,
其中一个很迷惑的问题,当查询日期选择任何5天内的没有什么问题,当查询超过5-8天后,查询就报124行'('语法错误,好像查询数据量一大就出问题,是否与以上的语句有设置不当有关呢,拜托各位解释下
如果需要可以把全部语句放上来
这个问题第1个回答:
SQL code
--加个语句,看看结果是什么,取年月用convert简单
select replace(convert(varchar(7),@sTmpDate,120),'-','')
If Exists(Select Name from SysObjects where name='pfSale'+replace(convert(varchar(7),@sTmpDate,120),'-','') and XType='U')
这个问题第2个回答:
SQL code
select 'pfSale'+replace(convert(varchar(7),getdate(),120),'-','')
pfSale200808
这个问题第3个回答:
查表是否存在
就这几行代码 看不出报错原因
124行是什么语句呀
这个问题第4个回答:
谢谢wzy_love_sly给的语句,明早去试下,再问下XType='U'是什么意思,好像还有其他参数,这项是做什么用的
这个问题第5个回答:
U = 用户表
这个问题第6个回答:
SQL code
Set @sTmpDate=@p1BgnDate
While Left(@sTmpDate,7) <=Left(@p2EndDate,7)
Begin
If Exists(Select Name from SysObjects where name='pfSale'+Left(@sTmpDate,4)+SubString(@sTmpDate,6,2)
and XType='U')
。。。。。。
End
Set @sTmpDate=Convert(Varchar(10),DateAdd(Month,1,@sTmpDate),120)
你这个SET语句是否是放在循环里面的,,,是否是这样?
SQL code
-- 这句是将起始日期赋给一个变量@sTmpDate
Set @sTmpDate=@p1BgnDate
-- 这句是循环的开始,当变量的值@sTmpDate小于或者等于终止日期@p2EndDate时,执行循环体里面的内容,
-- Left(@sTmpDate,7)是取得@sTmpDate左边的7位,不知道你数据里面存储的是什么类型,通常情况下是取的年月,
-- 这个要检查一下你的数据类型和转换类型才知道,
While Left(@sTmpDate,7) <=Left(@p2EndDate,7)
Begin
-- 这句的意思是,查询数据库中是否存在当前的@sTmpDate中拼接的表pfSaleYYYYMM.如果存在,则执行下面的操作,
-- 如果不存在则执行IF后面的操作.
-- name='pfSale'+Left(@sTmpDate,4)+SubString(@sTmpDate,6,2) 这个是拼接形如pfSaleYYYYMM的表,
-- XType='U'标识用户表,这个查询一下sysobjects里面就可以看到对应的类型.
If Exists(Select Name from SysObjects where name='pfSale'+Left(@sTmpDate,4)+SubString(@sTmpDate,6,2)
and XType='U')
BEGIN
。。。。。。
END
-- 这是将循环变量赋值,在月份上+1.
Set @sTmpDate=Convert(Varchar(10),DateAdd(Month,1,@sTmpDate),120)
End
这个问题第7个回答:
用2楼的方法还是查询超过5-7天时报'('语法错误,我把全部语句放上来,大家看看问题出在哪
解释:用查询时间的条件,生成一个临时表,然后做了个交叉表,按客户信息(CustomerCode)生成一个横向排列的客户信息,结果举例: 张三 张三_1 张三_2 李四 李四_1 李四_2
商品1 sjl mll zjgj sjl mll zjgj
商品2
/* 分店商品批发明细表,根据时间、分店查询。
输入参数: 开始日期
结束日期
分店编码
Created by jjz 2003-02-20
Modified by Ncj 2004-07-26
*/
Declare @p1BgnDate char(10) --手动输入的日期
Declare @p2EndDate char(10) --手动输入的日期
Declare @p3ShopCode varchar(6) --店的编号
select @p1BgnDate=:p1BegDate
select @p2EndDate=:p2EndDate
select @p3ShopCode=:p3ShopCode
Declare @sTmpDate char(10)
Declare @sSQL varchar(8000)
/*创建所需的临时表*/
If Exists(Select Name from Tempdb..SysObjects where Name='##TmpShopPfXs' and XType='U')
Drop table ##TmpShopPfXs
Create table ##TmpShopPfXs
(ShopCode Char(6),PluCode Char(20),accDate Char(10),VendorCode Char(15) null,CustomerCode Char(15),Customername char(30),
pluname char(30),CargoNo char(20) null,DepCode char(8),
PfPrice money,pfCount money,mll money,OJPrice money,sjl money,zjgj money
)
---分别代表,店编号, 商品编号, 单据日期, 供应商编号, 客户编号 ,客户名称, 商品名称, 货号 , 部门编号 ,
批发价, 批发数量 ,毛利率 , 最近进价 , 顺加率 , 该客户最近批发价
/*统计一段期间内的分店的批发明细数据*/
Set @sTmpDate=@p1BgnDate
While Left(@sTmpDate,7) <=Left(@p2EndDate,7)
Begin
If Exists(Select Name from SysObjects where name='pfSale'+Left(@sTmpDate,4)+SubString(@sTmpDate,6,2)
and XType='U')
Begin
Set @sSql='Insert into ##TmpShopPfXs(ShopCode,PluCode,accDate,VendorCode,CustomerCode,Customername,
PfPrice,pfCount,mll,pluname,CargoNo,OJPrice,sjl,zjgj,DepCode)
Select s.OrgCode,f.PluCode,accDate,g.VendorCode,t.CustomerCode,p.Customername,
f.PfPrice,pfCount,
case isnull(f.pfprice,0)
when 0 then 100 else (f.pfprice-OJPrice)*100.00/(f.pfprice) end as mll,pluname,CargoNo,OJPrice,case isnull(OJPrice,0)
---就是 最
[1] [2] 下一页