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);
15 个解决方案
#1
一个DML语句,要显示什么数据?
#2
就是把t4查询出来的某个字段值更新到t1中的某个字段,符合条件的就更新,不符合条件的更新为空值
#3
报什么错?贴下
#4
你这个正好就是 不加 exists 的 update 全表
#5
以下为报错信息,各位大神麻烦指点,谢谢
“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 ('');
#6
你应该把这个语句连上数据库执行一下看报什么错误。
从你的报错上看来,这并不是数据库上的错误。
从你的报错上看来,这并不是数据库上的错误。
#7
你把这句话放到plsql中执行,看看可以不
#8
执行报错
消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
#9
去掉这2句后可以执行啦,但是我需要在不符合ON后面的条件是,将T1.FLYC_Text的值设置为默认的值,此时以下语句报错,请教如何改,谢谢
WHEN NOT MATCHED THEN
INSERT (T1.FLYC_Text) VALUES ('');
#10
到底没有匹配到的时候是“更新为空值”?还是“设置为默认的值”???
如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接:
INSERT (FLYC_Text) VALUES (DEFAULT);
如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接:
INSERT (FLYC_Text) VALUES (DEFAULT);
#11
想设置为没有匹配的设置为默认值
即为:INSERT (FLYC_Text) VALUES (正常); 这样写也会报错
消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
#12
INSERT (FLYC_Text) VALUES ('正常');
字符串要用单引号引起来
#13
试过啦,没有用,还是一样的,谢谢
#14
教你一个方法,把select简化一下,先验证merge into ... when的结构是否正确使用,
#15
Merge都没搞清楚,Insert部分你想插入什么数据?NULL。。。每一个不匹配就插入一个NULL,为了最后数有多少个?
T1没有主键且都允许为空的话可能不会报错,但是不会有这样的写法,把T4中不匹配的KEY值插入到T1中会更有意义,
Update部分和Insert部分都应该用到T4的,否则你这Merge的合理性就很值得怀疑。
你先撇开Merge分步把逻辑设计出来,再考虑是否适用于Merge吧,
隐约的感觉着你是想分两种case执行Update,没有Insert的需求
T1没有主键且都允许为空的话可能不会报错,但是不会有这样的写法,把T4中不匹配的KEY值插入到T1中会更有意义,
Update部分和Insert部分都应该用到T4的,否则你这Merge的合理性就很值得怀疑。
你先撇开Merge分步把逻辑设计出来,再考虑是否适用于Merge吧,
隐约的感觉着你是想分两种case执行Update,没有Insert的需求
#1
一个DML语句,要显示什么数据?
#2
一个DML语句,要显示什么数据?
就是把t4查询出来的某个字段值更新到t1中的某个字段,符合条件的就更新,不符合条件的更新为空值
#3
报什么错?贴下
#4
你这个正好就是 不加 exists 的 update 全表
#5
报什么错?贴下
以下为报错信息,各位大神麻烦指点,谢谢
“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 ('');
#6
你应该把这个语句连上数据库执行一下看报什么错误。
从你的报错上看来,这并不是数据库上的错误。
从你的报错上看来,这并不是数据库上的错误。
#7
你把这句话放到plsql中执行,看看可以不
#8
你把这句话放到plsql中执行,看看可以不
执行报错
消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
#9
你应该把这个语句连上数据库执行一下看报什么错误。
从你的报错上看来,这并不是数据库上的错误。
去掉这2句后可以执行啦,但是我需要在不符合ON后面的条件是,将T1.FLYC_Text的值设置为默认的值,此时以下语句报错,请教如何改,谢谢
WHEN NOT MATCHED THEN
INSERT (T1.FLYC_Text) VALUES ('');
#10
到底没有匹配到的时候是“更新为空值”?还是“设置为默认的值”???
如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接:
INSERT (FLYC_Text) VALUES (DEFAULT);
如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接:
INSERT (FLYC_Text) VALUES (DEFAULT);
#11
到底没有匹配到的时候是“更新为空值”?还是“设置为默认的值”???
如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接:
INSERT (FLYC_Text) VALUES (DEFAULT);
想设置为没有匹配的设置为默认值
即为:INSERT (FLYC_Text) VALUES (正常); 这样写也会报错
消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
#12
到底没有匹配到的时候是“更新为空值”?还是“设置为默认的值”???
如果像你语句里写的那样,想插入一个空值,这是没有意义的事情,插入一个空行算什么意思? 如果设置为默认值(当前前提是你设置了该字段的默认值),那么就直接:
INSERT (FLYC_Text) VALUES (DEFAULT);
想设置为没有匹配的设置为默认值
即为:INSERT (FLYC_Text) VALUES (正常); 这样写也会报错
消息 10739,级别 15,状态 1,第 17 行
MERGE 语句中使用的插入列列表中不能包含多部分标识符。请改用单部分标识符。
INSERT (FLYC_Text) VALUES ('正常');
字符串要用单引号引起来
#13
试过啦,没有用,还是一样的,谢谢
#14
教你一个方法,把select简化一下,先验证merge into ... when的结构是否正确使用,
#15
Merge都没搞清楚,Insert部分你想插入什么数据?NULL。。。每一个不匹配就插入一个NULL,为了最后数有多少个?
T1没有主键且都允许为空的话可能不会报错,但是不会有这样的写法,把T4中不匹配的KEY值插入到T1中会更有意义,
Update部分和Insert部分都应该用到T4的,否则你这Merge的合理性就很值得怀疑。
你先撇开Merge分步把逻辑设计出来,再考虑是否适用于Merge吧,
隐约的感觉着你是想分两种case执行Update,没有Insert的需求
T1没有主键且都允许为空的话可能不会报错,但是不会有这样的写法,把T4中不匹配的KEY值插入到T1中会更有意义,
Update部分和Insert部分都应该用到T4的,否则你这Merge的合理性就很值得怀疑。
你先撇开Merge分步把逻辑设计出来,再考虑是否适用于Merge吧,
隐约的感觉着你是想分两种case执行Update,没有Insert的需求