Circuits
列CircuitID
とその他の情報を含むテーブルがあります。
また、その他の情報Ports
を含むテーブルもあります。PortID
そして、、 、、、およびその他の情報Connections
を含むさらに別のテーブルがあります。フェーシングは、それぞれフロントとリアを意味する「F」または「R」のみです。CircuitID
A_PortID
A_Facing
Z_PortID
Z_Facing
「F」フロントに入る接続は、「R」リアに接続されます。
CircuitID
基本的に必要なのは、回線の両端のポート ID とポート ID を含むビューを取得することです。
例えば。
接続テーブル内の回路「1」の場合
CircuitID, A_PortID, A_Facing, Z_PortID, Z_Facing
-------------------------------------------------
1 1 "F" 2 "R"
1 2 "F" 3 "F"
1 3 "R" 4 "R"
したがって、回路の接続全体は次のようになります
1 "F" <---> 2 "R" <> 2 "F" <---> 3 "F" <> 3 "R" <---> 4 "R"
したがって、回路については、PortID1=1
and Facing1="F"
and and PortID2=4
andFacing2="R"
回路ごとに接続数が異なるため、各回路から任意の接続を取得するストアド プロシージャまたは関数を使用することを考えています。
これにより、 and の向きを利用して、PortID
別のサブ プロシージャまたは関数を呼び出して、次に接続されている端を決定できます。リモート エンドに接続されているポートがなくなるまでループし続けます。
PortID
これで、このリモート エンドの向きを取得できます。
次に、同じ関数を実行して、もう一方の端を確認します。
最後に、結果をグループ化しCircuitID
、接続ポート ID と向きの両端を取得する必要があります。
ストアドプロシージャと関数のどちらを使用する必要があるかについて、誰かがアドバイスできることを願っています。ループを続けて、別のサブプロシージャまたは関数を呼び出します。この用途にどちらが適しているかはわかりません。ストアド プロシージャまたは関数。
次の接続を見つけるためだけにサブプロシージャを作成しました
CREATE PROCEDURE dbo.GetNextEnd(@Portid int, @Facing varchar)
AS
SELECT Connections.Z_PortID AS RemotePortID, Connections.Z_Facing AS RemoteFacing,
Connections.Z_RackID As RemoteRackID, Connections.Z_Description As RemoteDescription FROM Connections WHERE Connections.A_PortID = @PortID AND Connections.A_Facing = @Facing
UNION
SELECT Connections1.A_PortID AS RemotePortID, Connections1.A_Facing AS RemoteFacing,
Connections1.A_RackID As RemoteRackID, Connections1.A_Description As RemoteDescription FROM Connections AS Connections1 WHERE Connections1.Z_PortID = @PortID AND Connections1.Z_Facing = @Facing
上記のサブプロシージャを呼び出すために、メインプロシージャまたは関数でループを利用する方法の例を誰かが示してくれることを願っています。
私は何週間も試みてきましたが、まだ SQL で動作させることができません。私を助けてください...