自定义挂钩无效时,请按钮单击按钮

发布于 2025-01-27 12:32:34 字数 1776 浏览 2 评论 0原文

我很难找到此SQL语句出了问题。我正在使用pyodbc最新和odbc驱动程序17 for sql Server,这是语句:

insert_sql = """MERGE VehicleDistanceReport trg
                            USING (VALUES (?, ?, ?))
                            src(
                            Distance,
                            Ic_Siparis_No,
                            Vehicle_Hour
                            )
                                    ON trg.Ic_Siparis_No = src.Ic_Siparis_No
                            WHEN MATCHED THEN
                                    UPDATE SET 
                                    Distance = src.Distance,
                                    Ic_Siparis_No = src.Ic_Siparis_No,
                                    Vehicle_Hour = src.Vehicle_Hour
                                    WHERE trg.NodeGroup LIKE N'%AĞIR%' OR trg.NodeGroup LIKE N'%MAKİNE%'
                            WHEN NOT MATCHED THEN
                                    INSERT(
                                        id,
                                        Record_No,
                                        Device_No,
                                        License_Plate,
                                        Inı
                                        Distance,
                                        Ic_Siparis_No,
                                        Vehicle_Hour
                                        )                                        
                                    VALUES(
                                        src.Distance,
                                        src.Ic_Siparis_No,
                                        src.Vehicle_Hour
                                        );"""

它说其中 statement附近有一个语法错误但是查询似乎在SQL Server中工作。

I'm having trouble on finding what is wrong with this SQL statement. I'm using pyodbc latest and ODBC Driver 17 for SQL Server, here is the statement:

insert_sql = """MERGE VehicleDistanceReport trg
                            USING (VALUES (?, ?, ?))
                            src(
                            Distance,
                            Ic_Siparis_No,
                            Vehicle_Hour
                            )
                                    ON trg.Ic_Siparis_No = src.Ic_Siparis_No
                            WHEN MATCHED THEN
                                    UPDATE SET 
                                    Distance = src.Distance,
                                    Ic_Siparis_No = src.Ic_Siparis_No,
                                    Vehicle_Hour = src.Vehicle_Hour
                                    WHERE trg.NodeGroup LIKE N'%AĞIR%' OR trg.NodeGroup LIKE N'%MAKİNE%'
                            WHEN NOT MATCHED THEN
                                    INSERT(
                                        id,
                                        Record_No,
                                        Device_No,
                                        License_Plate,
                                        Inı
                                        Distance,
                                        Ic_Siparis_No,
                                        Vehicle_Hour
                                        )                                        
                                    VALUES(
                                        src.Distance,
                                        src.Ic_Siparis_No,
                                        src.Vehicle_Hour
                                        );"""

It says there is a syntax error near WHERE statement but the query seems to work in SQL server.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叹沉浮 2025-02-03 12:32:34

当匹配子句是错误的时,您的,其中应该是条件。同样,No Pooint更新IC_SIPARIS_NO,因为无论如何是连接条件,

WHEN MATCHED AND trg.NodeGroup LIKE N'%AĞIR%' OR trg.NodeGroup LIKE N'%MAKİNE%' THEN
    UPDATE SET 
    Distance = src.Distance,
    Vehicle_Hour = src.Vehicle_Hour

都不会试图将此条件放在上的条款上,这会导致结果不正确。

Your WHEN MATCHED clause is wrong, as the WHERE should be a condition. Also no pooint updating Ic_Siparis_No as it's the joining condition anyway

WHEN MATCHED AND trg.NodeGroup LIKE N'%AĞIR%' OR trg.NodeGroup LIKE N'%MAKİNE%' THEN
    UPDATE SET 
    Distance = src.Distance,
    Vehicle_Hour = src.Vehicle_Hour

Don't be tempted to place this condition in the ON clause, it will cause incorrect results.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文