求大神指点,sql那里错啦。查不出数据,谢谢
MERGE INTO TMP3B90C8C7F05911E79701005056F T1
USING(SELECT T3.FDATAVALUE AS FDATAVALUE ,T2.FENTRYID AS FENTRYID FROM T_SAL_ORDERENTRY T2
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L T3 ON T2.F_PAEZ_ASSISTANT=T3.FENTRYID) T4
ON (T1.FORDERID=T4.FENTRYID)
WHEN MATCHED THEN
UPDATE SET T1.FLYC_Text=T4.FDATAVALUE
WHEN NOT MATCHED THEN
INSERT (T1.FLYC_Text) VALUES (NULL);
MERGE INTO TMP3B90C8C7F05911E79701005056F T1
USING(SELECT T3.FDATAVALUE AS FDATAVALUE ,T2.FENTRYID AS FENTRYID FROM T_SAL_ORDERENTRY T2
LEFT JOIN T_BAS_ASSISTANTDATAENTRY_L T3 ON T2.F_PAEZ_ASSISTANT=T3.FENTRYID) T4
ON (T1.FORDERID=T4.FENTRYID)
WHEN MATCHED THEN
UPDATE SET T1.FLYC_Text=T4.FDATAVALUE
WHEN NOT MATCHED THEN
INSERT (T1.FLYC_Text) VALUES (NULL);
以下为报错信息,各位大神麻烦指点,谢谢“Kingdee.BOS.SQL.Exception.ParserException”类型的异常在 Kingdee.BOS.SQL.dll 中发生,但未在用户代码中进行处理其他信息: parse error. detail message is : Error: expect token <Punctuation,)>, but current token is <Punctuation,.>, at line 9, column 13)source sql is : MERGE INTO TMP10356E36F08111E7AC14B88198B A USING (SELECT t1.FENTRYID as FENTRYID,t2.FDATAVALUE as FDATAVALUE FROM T_SAL_ORDERENTRY t1 left join T_BAS_ASSISTANTDATAENTRY_L t2 on t2.FENTRYID=t1.F_PAEZ_ASSISTANT)B ON (B.FENTRYID=A.FORDERID) WHEN MATCHED THEN UPDATE SET A.FLYC_Text=B.FDATAVALUE WHEN NOT MATCHED THEN INSERT (T1.FLYC_Text) VALUES ('');
执行报错
消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
去掉这2句后可以执行啦,但是我需要在不符合ON后面的条件是,将T1.FLYC_Text的值设置为默认的值,此时以下语句报错,请教如何改,谢谢
WHEN NOT MATCHED THEN INSERT (T1.FLYC_Text) VALUES ('');
想设置为没有匹配的设置为默认值
即为:INSERT (FLYC_Text) VALUES (正常); 这样写也会报错 消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
想设置为没有匹配的设置为默认值
即为:INSERT (FLYC_Text) VALUES (正常); 这样写也会报错 消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
INSERT (FLYC_Text) VALUES ('正常'); 字符串要用单引号引起来
T1没有主键且都允许为空的话可能不会报错,但是不会有这样的写法,把T4中不匹配的KEY值插入到T1中会更有意义,
Update部分和Insert部分都应该用到T4的,否则你这Merge的合理性就很值得怀疑。你先撇开Merge分步把逻辑设计出来,再考虑是否适用于Merge吧,
隐约的感觉着你是想分两种case执行Update,没有Insert的需求