0

複数の select ステートメントの背後にある推論の頭と尾を互いに作ろうとしています。言い換えれば、ポイントは何ですか?注: 私は T-SQL にかなり精通しています... SQL Server の保守面から開発面に移動しました。以下は、私を混乱させるコード(一部)です。

SELECT DISTINCT id
,NAME
,TypeCode
,ProductId
,ProductName
,LocationCode
,County
,STATE
,RecommendationType
,PackageName
FROM (
SELECT c.Id
    ,C.NAME
    ,p.Typecode
    ,p.ProductId
    ,p.Productname
    ,p.LocationCode
    ,p.County
    ,p.STATE
    ,'Appened' AS RecommendationType
    ,PackageName
FROM (
    SELECT op.*
        ,t.i.value('@ProductId', 'varchar(50)') AS productId
        ,t.i.value('@Name', 'varchar(50)') AS Product
    FROM (
        SELECT pg.CustomerId
            ,pg.NAME AS PackageName
            ,pg.runtimedefinition.query('/PackageDefinition/Products')                                    AS CList
        FROM product.package pg WITH (NOLOCK)
        ) op
    CROSS APPLY clist.nodes('Products/Task[@xsi:type="ProductTask"]') t(i)
    ) m

覚えておいてください...このコードは一部です。

ありがとう!!

4

1 に答える 1

0

2番目のものは、リテラルが入力された1つの列のみを追加するだけなので、少し無意味に思えますが、それ以外です。

以前の化身では、より多くのことを行っていた可能性があり、リファクタリングは労力がかかりすぎると見なされたか、開発者の記憶喪失に苦しんでいた可能性があります。「私はそれをやったと思った」マネージャーの割り込み、別のコードの修正に取り掛かり、これがまだ終わっていないことを忘れてください。

テクニックに関しては、解決策を考え出す良い方法です。私はそれを裏返しに呼んでいますが、おそらくそれには学名があります.

xml との相互適用にすべての労力を費やして機能させた後は、結果を使用して、内部クエリとしてラップすることで追加の動作を追加する方が簡単です。

一時テーブルよりもノイズが少なく、CTE以前に開発されたか、開発者がそれらにあまり慣れていない可能性があります。

1 つまたは 2 つの点が見え始めるかもしれません。:)

于 2013-10-07T21:03:51.180 に答える