-3

编辑

在第二行中,我指出结果在语法上不同但在语义上相同。我的问题是,为什么这可能是使用标准 SQL Server 生成脚本造成的。
以下来自数据库的两个不同副本,我们在其中生成了脚本。它们都来自同一个触发器。同样,问题是为什么这可能是由脚本的自动生成导致的,或者这是一个不可能/不可能的问题,因此直接指向手动干预,即故意编辑触发器/脚本。

对于没有更早地以更好的方式解释前提,我最诚挚的歉意。

我试图确定一个客户的错误,我得到了他们的架构副本,触发器等。

在某些情况下,我发现产生完全相同结果的语法差异,例如

BEGIN
    UPDATE cd_units
        SET shift_expired_status = 0
    FROM inserted
    WHERE inserted.shift_start >= dbo.get_dts()
        AND inserted.unid = cd_units.unid
END

VS

BEGIN
    UPDATE cd_units
        SET shift_expired_status = 0
FROM inserted
WHERE inserted.unid = cd_units.unid
    AND inserted.shift_start >= dbo.get_dts();
END

如您所见,最终结果是相同的,但功能相同。

这不应该是,除非有人在和我玩比利苏格,对吗?但这已经需要对此事进行更深入的调查。

4

2 回答 2

2

Generate Scripts 命令只是准确地复制存储在有关对象的元数据中的内容。如果他们得出不同的结果,那是因为对象不同。也许有人改变了它,因为他们对 SQL Server 如何根据子句的顺序进行优化有误解?我们无法知道它是如何改变或为什么改变的;我们只知道 SQL Server 不会为您更改它。您需要向负责维护数据库的人员询问对象可能已更改的原因。

于 2013-08-14T19:07:27.433 回答
1

鉴于我不确定我是否完全理解这个问题,所以我很犹豫要不要回答,但您似乎对这两个问题感到困惑。

除了空格差异(不会以任何方式影响查询),这两个查询在语义上是相同的。唯一的区别是WHERE子句中条件的顺序。条件本身是相同的,所以你会得到相同的结果。

于 2013-08-14T18:52:33.963 回答