2007-07-06

 

令人郁闷的MDB SQL转参

折腾了半天,一个SQL死活通不过:
UPDATE
LINGS_GOODS
SET LINKID=@LINKID
WHERE ID IN (
SELECT
ID
FROM LINGS_GOODS
WHERE LINKID IN (
SELECT
DISTINCT LINKID
FROM LINGS_GOODS
WHERE LINKID<>0
AND ID IN (@GOODSID4LINKID6
,@GOODSID4LINKID14
,@GOODSID4LINKID7
,@GOODSID4LINKID10
,@GOODSID4LINKID11) )
OR ID IN (@GOODSID4GOODSID6
,@GOODSID4GOODSID14
,@GOODSID4GOODSID7
,@GOODSID4GOODSID10
,@GOODSID4GOODSID11) )

转参:
LINKID:6
GOODSID4LINKID6:6
GOODSID4LINKID14:14
GOODSID4LINKID7:7
GOODSID4LINKID10:10
GOODSID4LINKID11:11
GOODSID4GOODSID6:6
GOODSID4GOODSID14:14
GOODSID4GOODSID7:7
GOODSID4GOODSID10:10
GOODSID4GOODSID11:11

更新之后,发现新的值竟然是 11, 而不是 6。
最后试着将 LINKID 参数的位置调整到最后,更新正确了!
Access SQL 的参数问题以前也遇到过,之前以为只要名称对上,次序可以随意,但结果却是非得要按参数在SQL中出现的次序来一一指定参数不可,不然就错位了,似乎不支持参数名,SQL中的参数名,完全可以用 ? 来代替。

但现在这问题来看,对于参数的次序问题,看来不是完全按 SQL 文文本的次序来定,而是按实际执行的子查询的次序来定。
上面的 SQL 中,两个子查询先执行,更新操作是最后执行,所以更新内容的参数就要放在最后。

哎,实在令人郁闷,一个知识点的缺失,贴进去大半天的时间。

Labels: ,


This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]