Questione : mostrare un messaggio e volere vedere tutti i filetti a quel messaggio.

ha ottenuto un'altra domanda.

if scatto sopra l'esposizione un messaggio allora che voglio vedere tutti i filetti a quello message.

Need per sviluppare una PROCEDURA immagazzinata di procedure.

ALTER [dbo]. [prc_Messages_Response_Select_All]
SELECT
A. [MessageID],
A. [ProfileID],
A. [FromProfileID],
A. [FromUsername],
B. [username] del

AS
BEGIN
NOCOUNT ON
del
COME SentToUserName,
A. [oggetto],
A. [corpo], convertito del
(varchar, A. [MsgDate], 107) COME zdate,
A. [MsgDate],
A. [MsgRead],
A. [MsgReplied],
A. [MsgNew],
A. [ReplyOfMessageID],ORDINE [tbl_Profile] INTERNO BY
A. [MsgDate] DESC
END
GO
del
del =@FromProfileID del
WHERE
A. [FromProfileID] del b
ON
A. [ProfileID] =b. [ProfileID] del a
JOIN
del
FROM
[tbl_Messages] del
A. [InitialMessageID] class= > " libero " del
> " del codeSnippet " del class= del
class= " lineNumbers " del
class= del
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
>not notpretty " del class= " del id= " codeSnippet950463 del
           
class= del

Risposta : mostrare un messaggio e volere vedere tutti i filetti a quel messaggio.

Forse qualcosa di simile aiuterà. Usa un metodo comune ricorsivo di espressione della tabella. Il principale è che la prima domanda è la vostra domanda dell'ancoraggio che nel vostro caso è vostra la sezione iniziale using @FromProfileID. Allora using la ricorrenza di CTE (UNIONE TUTTA), vi associate a quei messaggi che sono risposte o collegato all'identificazione di messaggio iniziale. Se i vostri messaggi di livello secondario ha sempre una risposta dell'identificazione di messaggio probabilmente non avete bisogno del secondo controllate SOPRA la clausola.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
; CON i msgs
AS
(
    -- ottenere il primo messaggio
    SELEZIONARE  0 come MessageLevel,
            a. [MessageID],
            a. [ProfileID],
            a. [FromProfileID],
            a. [FromUsername],
            b. [username] COME SentToUserName,
            a. [oggetto],
            a. [corpo],
            convertito (varchar, A. [MsgDate], 107) COME zdate,
            a. [MsgDate],
            a. [MsgRead],
            a. [MsgReplied],
            a. [MsgNew],
            a. [ReplyOfMessageID],
            a. [InitialMessageID]
    DA
            [tbl_Messages] a
      INTERNO UNIR
            b [tbl_Profile]
            SU
                  a. [ProfileID] = B. [ProfileID]
    DOVE
            a. [FromProfileID] = @FromProfileID
    
    -- parte ricorsiva di CTE        
    UNIONE TUTTA 
    
    SELEZIONARE  m.MessageLevel+1,
            a. [MessageID],
            a. [ProfileID],
            a. [FromProfileID],
            a. [FromUsername],
            b. [username] COME SentToUserName,
            a. [oggetto],
            a. [corpo],
            convertito (varchar, A. [MsgDate], 107) COME zdate,
            a. [MsgDate],
            a. [MsgRead],
            a. [MsgReplied],
            a. [MsgNew],
            a. [ReplyOfMessageID],
            a. [InitialMessageID]
    DA
            [tbl_Messages] a
      INTERNO UNIR
            b [tbl_Profile]
            SU
                  a. [ProfileID] = B. [ProfileID]
      INTERNO UNIR 
            msgs m.
            SU
                  a. [ReplyOfMessageID] = M. [MessageID]
                  O A. [InitialMessageID] = M. [MessageID] -- non può avere bisogno di questo
) 
SELEZIONARE *
Dai msgs
ORDINE da MessageLevel, [MsgDate] DESC
Altre soluzioni  
 
programming4us programming4us