'sql sever' 的SQL 转至ACCESS (200分)

  • 主题发起人 主题发起人 hzbl
  • 开始时间 开始时间
H

hzbl

Unregistered / Unconfirmed
GUEST, unregistred user!
有类似下列的SQL语句,需要转换成ACCESS能支持的SQL
主要问题:
1.ACCESS是否不支持变量
2.ACCESS是否不能在同一查询中连续执行两句以上如:select * from t1
Update t1 set f1 =1
3.ACCESS 是否不支持 select ... from t1,t2 left joni t3 on ...,t6
******************************
DECLARE @vMonth int
SELECT @vMonth=:Month
SELECT
s3.ContractID,
p7.Name,
s3.SignDate ConDate,
HomeNum=(CASE dataLength(ltrim(b4.Build)) When 0 THEN NULL WHEN NULL THEN NULL ELSE +ltrim(b4.Build)+"-" END +
CASE dataLength(ltrim(b4.Unit)) When 0 THEN NULL WHEN NULL THEN NULL ELSE ltrim(b4.Unit)+"-" END +
ltrim(b4.RoomNo)),
b10.Name HomeTypeName,
b4.Acreage AppAcreage,
s3.PerMoney,
b.Acreage,
s3.TotMoney,
p14.Name PaymentName,
p18.Name WorkName,
s3.Introducer,
s3.comment,
b3.Name BuidingName
FROM
Sell_RealSell s3
LEFT OUTER JOIN pub_PaymentKind p14 ON s3.PaymentID=p14.ID
LEFT OUTER JOIN ( Building_Info b4
LEFT OUTER JOIN Building_Type b10 ON b4.BuildTypeID=b10.ID
LEFT OUTER JOIN building_append b ON b4.ID=b.BuildID
LEFT OUTER JOIN Building_Group b3 ON b4.BuildGroup=b3.ID
) ON s3.BuildID=b4.ID,
sell_salers s12,
sell_customs s5,
pub_Worker p18,
pub_Custom p7
WHERE
p7.ID=s5.CustomID AND
s12.ContractID=s3.ID AND
s5.ContractID=s3.ID AND
s12.SalerID=p18.ID AND
b3.ID=:BuildGroupID AND
s12.ContractType=2 AND
s5.ContractType=2 AND
(NOT (s3.Flag LIKE "无效%") OR (s3.Flag is NULL)) AND
((DATEPART(yy,s3.SignDate)*100+DATEPART(mm,s3.SignDate))=@vMonth)
ORDER BY b10.Name, s3.ContractID
 
Help!我还有五○分愿意全加上!
 
最好查access help
 
ACCESS help 主要介绍它的自己的操作,JET SQL 参考也太简单!
 
不懂ACCESS
来听听
 
(DATEPART(yy, -> year
((DATEPART(mm, -> month
case -> iif
 
先谢谢soul,您说的如datepart('yyyy',...),datepart('m',...),ACCESS
的用法,包括case -> iif 或 Switch 我已知,而且总结了二十几条,下次整理一贴上来。
我想了解的关键是上面提出的几点
ACCESS 是否不支持 DECLARE ,有无替代方法,我曾经用临时表,
但有无法避免的.
 a.多用户冲突.
 b.以及在一个查询中不能连续执行两句以上sql,第一句是产生临时表,
  第二句select这也是我第一次贴上的第二个问题。
c.ACCESS 的FROM后似乎不支持多表和 JOIN 表的并列如:
   SELECT T1.Name,T2.ID,T3.Comment From T1,T2 left join T3 ON
T2.OID =T3.ID
类似的情况应如何解决,十万火急,请多多帮忙!!! 
 
小弟在工作中改造一程序时发现有关SQL SEREVER 和 ACCESS的SQL语法
的几点不同(另似乎与DEPHI是通过BDE还是ADO调用有关),请指正:

SQL SERVER ACCESS
***********************************************************
添加 insert insert into
删除    delete table where ... delete * from table where ...
日期   "yy-mm-dd","yy-mm-nn hh:mm:nn" #yy-mm-dd#,"yy-mm-nn hh:mm:nn"
     注:与日期格式无关,关键是是否有时间(ADO)
通配    % BDE:* ADO:%      
函数   CASE IIF,SWITCH
CONVER CINT,CCURR.....
DATALENGTH LEN
ASCII ASC
DATEPART(yy,mydate) DATEPART('yyyy',mydate)
DATEPART(mm,mydate) DATEPART('m',mydate)
. .
. .
. .       
还有一些如CLIENTDATASET与ADODATASET返回的FIELDDATATYPE的不同
如:ftstring---->ftwidestring ftcurrency---->ftbcd 似乎都会
引起一些问题CLIENTDATASET 的过滤器不支持ftwidestring,ftbcd在
DBGrid中会将小数部分自动四舍五入。

希望此方面的高手或感兴趣的兄弟给我一些资料或共同探讨
特别是前面贴子的问题请多多指点,谢谢!
EMAIL:hzbl@sina.com
 
Access不支持多句方式,也不支持FROM 后的select 更别说还要join。
不支持光标。但Dynaset方式相当于keyset方式。
总而言之只支持sql语句,不支持过程。而且对sql查询的优化很差,复杂的语句
会造成难以理解的性能下降。所以只能把Access当作Desktop的数据库来使用,
别期望太高。
 
DECLARE 可以用 PARAMETERS来实现,但使用起来反而麻烦。
 
过节和朋友去玩,不错,刚回。
soul 兄能否详细的说一下 PARAMETERS实现DECLARE 的方法,
万分感激!小弟现在是逼上梁山,不怕麻烦,只怕不行。
顺便问一下EMail通知是否不灵?
 
嘿嘿,soul 继续
 
多人接受答案了。
 
后退
顶部