我有一个表Circuits
,其中包含一列CircuitID
和一些其他信息。
我还有一张Ports
包含PortID
其他信息的表格。
我还有另一个表,Connections
其中包含CircuitID
、A_PortID
、A_Facing
、和其他一些信息。正面只能是“F”或“R”,分别表示正面和背面。Z_PortID
Z_Facing
任何进入“F”前部的连接都连接到“R”后部。
基本上我需要的是检索包含CircuitID
电路每一端的端口 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 PortID2=4
andFacing2="R"
由于每个电路的连接数量各不相同,我正在考虑使用存储过程或函数从每个电路获取任何 1 个连接。
有了这个,我可以利用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 中工作。请帮我...