评论和答案为“SQLExecutor - 如何更新多个SQL Server列在一个查询?” https://knowledge.亚搏在线safe.com/questions/48463/sqlexecutor-how-to-update-multiple-sql-server-colu.html 最新的评论和答案的问题“SQLExecutor - 如何在一个查询更新多个SQL Server列” daleatsafe评论dalea亚搏在线tsafe的评论 https://knowledge.亚搏在线safe.com/comments/48601/view.html 一个可能的原因的速度差异是,作家可以优化和重复使用查询,而SQLExecutor必须发送查询下来每个记录。所以,笔者有更多的散装机会。可能不是真正的原因,但值得意识到的。搜索结果 格林威治时间2017年7月25日星期二05:53:04 daleat亚搏在线safe 评论由david_r上david_r的评论 https://knowledge.亚搏在线safe.com/comments/48550/view.html 要知道,在DatabaseUpdater的履行很可能是相同的,一个普通作家。 星期一,2017年7月24日13时41分09秒GMT david_r tim_wood评论tim_wood的回答 https://knowledge.亚搏在线safe.com/comments/48549/view.html 谢谢。我要看看它。但我想我已经听说过我是不是真的意识到这一点。我想也许这是为SQLExecutor的老名字,但显然不是。结果 格林尼治时间2017年7月24日星期一13:39:42 tim_wood 通过erik_jan回答 https://knowledge.亚搏在线safe.com/answers/48546/view.html 为了避免写这段代码,FME有一个DatabaseUpdater transformer。

你考虑过用这个吗?

星期一,2017年7月24日13点16分59秒GMT erik_jan
评论由david_r上david_r的评论 https://knowledge.亚搏在线safe.com/comments/48539/view.html 尝试类似点击<前>更新mytable的设置DepartmentOrganisation = COALESCE(NULLIF(部门, '')+ '', '')+ COALESCE(NULLIF(组织, ''), '')您“会只需要一次为整个表执行。无需使用比创造者和SQLExecutor以外的任何变压器。应比使用FME快得多。 格林尼治时间2017年7月24日星期一10:03:22 david_r tim_wood评论tim_wood的评论 https://knowledge.亚搏在线safe.com/comments/48535/view.html 也许这是我的一部分缺乏的SQL Server的知识。但也许是我在做什么更好的解释会有所帮助。该表是地址数据。我串接在各个领域例如值部场和组织字段为一个字段DepartmentOrganisation,也把2个值之间的逗号例如“销售部门,安全软件”。亚搏在线如果对部门没有价值,我不希望组织(即“安全软件”不“安全软件”)前,合并的值有逗号。亚搏在线这是用一堆测试仪和AttributeCreators的完成。有涉及10个源字段更复杂的级联这将是很难做到与嵌套,如果在SQLExecutor功能。所以我认为,当我到达终点,我需要在where子句使SQL Server知道哪一行来更新。搜索结果,您的评论已经让我不知道我是否能够打电话给SQLExecutor每个输出场一次 the value has been generated, rather than waiting until the end. Perhaps some of the simpler concatenations could be converted from Tester + AttributeCreator to SQLExecutor only...
格林尼治时间2017年7月24日星期一09:43:39 tim_wood
tim_wood评论tim_wood的评论 https://knowledge.亚搏在线safe.com/comments/48531/view.html 喜欢它,但它应该测试的属性为空字符串,而不是属性具有价值?搜索结果 2017年7月24日星期一09:00:39 GMT tim_wood 答案由david_r https://knowledge.亚搏在线safe.com/answers/48517/view.html

尝试类似以下:创造者->SQLExecutor具有以下代码:

更新所有者。其中,set field1 = iif(field1 = ", null, field1), set field2 = iif(field2 = ", null, field2), set field3 = iif(field3 = ", null, field3),…注意,这里没有where-子句,并且SQLExecutor只被调用一次。

>

文档。提示:在执行这样的查询之前,一定要对表进行备份 格林尼治时间2017年7月24日星期一07:34:11 david_r 评论由david_r上david_r的评论 https://knowledge.亚搏在线safe.com/comments/48511/view.html 你真的需要那个where-从句吗?我以为你在更新整个表,在这种情况下where-子句只是使事情复杂化。让数据库为您工作。 格林尼治时间2017年7月24日星期一7点17分30分 david_r 评论由david_r上david_r的评论 https://knowledge.亚搏在线safe.com/comments/48510/view.html 那没有任何意义。您向SQLExecutor发送了多少功能?如果您发送的特性比要更新的列多(不是记录!),那么就有问题了。 格林尼治时间2017年7月24日星期一07:14:11 david_r 高桥对高桥的评论 https://knowledge.亚搏在线safe.com/comments/48485/view.html 关于零。
由于@Value()函数返回空字符串,如果属性是一个非值三元组- <empty>, <null>, <missing>
用SQL语句写NULL,你将不得不用一个字符串值“NULL”代替属性值(不是<null>属性为这三个属性之一时,使用AttributeCreator或AttributeManager中的条件值设置。

field1 = If field1 have a value Then '@ReplaceString(@Value(field1),', ")' Else null(一个字符串值"null",而不是<null>值)< / pre > < p > < img src = " /存储/ temp / 9570 -条件-价值-设置的例子。那么,SQl语句自然应该改成:

update owner。表集field1 = @Value(field1),…< / >之前
     
      2017年7月21日星期五22:29:00 GMT
     
    
    
     tim_wood评论tim_wood的评论
https://knowledge.亚搏在线safe.com/comments/48471/view.html
      这是我的SQL语句:
update owner。表< br >设置field1 = < a href = " mailto:“@ReplaceString % @ value % field1 28日28日% 29日”,“% 29”>“@ReplaceString (@ value (field1)”、“,”)的< / >、< br > field2 = < a href = " mailto:“@ReplaceString % @ value % field2 % 29日,28日28日”,“% 29”>“@ReplaceString (@ value (field2),”,”)”< / >, < br > field3 = < a href = " mailto:“@ReplaceString % @ value % 28 field3 % 29日”,“% 29”>“@ReplaceString (@ value (field3)”,”)”< / >, < br > field4 = < a href = " mailto:“@ReplaceString % @ value % 28 field4 % 29日”,“% 29”>“@ReplaceString (@ value (field4)”,”)”< / >、< br > field5 = “@ReplaceString (@ value (field5)”,”)”< / >、< br > field6 = < a href = " mailto:“@ReplaceString % @ value 28日% 28 field6 % 29日”,“% 29”>“@ReplaceString (@ value (field6)”,”)”< / >、< br > field7 = < a href = " mailto:“@ReplaceString % @ value 28日% 28 field7 % 29日”,“% 29”>“@ReplaceString (@ value (field7)”,”)的< / > < br > UID = < a href = " mailto: @ value % 28 UID % 29”>“@ value (UID) < / > < br >我看不到任何其他的变压器参数参考利率。< br >
周五,2017年7月21日十六点36分20秒GMT tim_wood
评论由mark_1spatial上mark_1spatial的答案 https://knowledge.亚搏在线safe.com/comments/48470/view.html < br > < rel = "用户" href = " /用户/ 531 /姆·伍德。html" nodeid="531">@tim_wood在SQLExecutor中没有提交,是吗?这将大大降低它的速度! 周五,2017年7月21日十六时32分24秒GMT mark_1spatial tim_wood评论tim_wood的回答 https://knowledge.亚搏在线safe.com/comments/48468/view.html 那么在这种情况下,它看起来像SQLExecutor失去到SQL Server非空间作家(与fme_db_operation设置为UPDATE)为7个领域我想更新。这样做的作家路坐8分钟,10万条记录,而SQLExecutor甚至没有在20分钟内管理20,000条记录。照片的另一个问题在SQLExecutor我的更新语句是空越来越变成不发生空字符串与作家。我怀疑与处理将慢下来,甚至更多...点击有趣的比较SQLExecutor和SQL Server非空间作家之间的巨大的性能差异为2个不同的更新任务。下面,笔者手中夺了下来,但在我的其他例子,SQLExecutor是明显的赢家:点击的 https://knowledge.safe.com/question亚搏在线s/48437/sql-server-update-table-to-replace-empty-string-wi.html?childToView = 48459#评论 - 48459 点击所以这是值得尝试的两种方式。结果 格林威治时间2017年7月21日星期五16:24:36 tim_wood tim_wood评论tim_wood的回答 https://knowledge.亚搏在线safe.com/comments/48467/view.html 是的,单引号。好点。我记住了Where子句,但是在要更新的列中漏掉了它们。然后我必须处理源值中的单引号,因为它们需要在SQL查询中加倍。
Set myField = '@ReplaceString(@Value(myValue),', ")'
似乎做的把戏。我很高兴我正在更新的字段没有一个是日期字段,但如果它们是,我怀疑我可能不得不使用@DateTimeParse(@Value(myValue),%Y-%m-%d,修复)
格林威治时间2017年7月21日星期五16:01:49 tim_wood
答案由david_r https://knowledge.亚搏在线safe.com/answers/48464/view.html

我不能说,为什么COG是红色的,但我怀疑这是一个错误。确保属性您在SQL中引用正确曝光在工作区中,注意区分大小写。

知道SQLExecutor没有对自己的SQL语法的概念,它会通过在任何你写有您的数据库。所以,如果你的数据库是MS SQL,你基本上可以写任何MS SQL接受的SQLExecutor,FME不会验证什么,但内部功能的引用,如@Value()等。

注意,但是,if fieldA and/or fieldB are string values, you must make sure to insert the single quotes yourself, e.g.

update dbo.owner.mytable set field1 = '@Value(fieldA)' where ...

Other than that you seem to be on the right track.

周五,2017年7月21日15点32分27秒GMT david_r