Questione : Necessità di installare questa procedura immagazzinata.

Generare la PROCEDURA [dbo]. [prc_Messages_Response_Select_All] @FromProfileID INT
del
; CON msgs
AS
BEGIN
(
    -- ottenere il primo message
SELEZIONANO 0 come MessageLevel, il
il A. [MessageID], il
il A. [ProfileID], il
il A. [FromProfileID], il
il A. [FromUsername], il
il B. [username] COME SentToUserName, il
il A. [oggetto], il
il A. [corpo], convertito del
(varchar, A. [MsgDate], 107) COME zdate, il
il A. [MsgDate], il
il A. [MsgRead], il
il A. [MsgReplied], il
il A. [MsgNew], il
il A. [ReplyOfMessageID], il
del
il A. [InitialMessageID]    B
ON
A. [ProfileID] del a
JOIN
di FROM
[tbl_Messages] =
WHERE
A. [FromProfileID] del B. [ProfileID] =
del @FromProfileID
    -- UNIONE che ricorsiva TUTTO IL
del
SELEZIONARE m.MessageLevel + 1,
A. [MessageID],
A. [ProfileID],
A. [FromProfileID],
A. [FromUsername],
B. [username] del
della parte di CTE COME SentToUserName,
A. [oggetto],
A. [corpo], convertito del
(varchar, A. [MsgDate], 107) COME zdate,
A. [MsgDate],
A. [MsgRead],
A. [MsgReplied],
A. [MsgNew],
A. [ReplyOfMessageID],
            il b
ON
il A. [ProfileID] del a
JOIN
del
FROM
[tbl_Messages] del A. [InitialMessageID] =
del B. [ProfileID] INTERNO UNISCE il m
ON
il A. [ReplyOfMessageID] =
del M. [MessageID] O il A. [InitialMessageID] dei msgs del
= M. [MessageID] -- non può avere bisogno del

SELECT del this
) * da msgs
ORDER da MessageLevel, [MsgDate] DESC

END
Msg 102, il Livello 15, la condizione 1, il prc_Messages_Response_Select_All, la linea sintassi di procedura di 3
Incorrect vicino “; „. il
Msg 156, Livello 15, condizione 1, prc_Messages_Response_Select_All, linea sintassi di procedura di 5
Incorrect vicino alla parola chiave “COMINCIA„.
class= del

Risposta : Necessità di installare questa procedura immagazzinata.

Dovete ricordarti che la struttura bassa della procedura immagazzinata è:

generare il proc_name di procedura
   @parameter1 [, @parameter2 [, @parameterN]]
As
[cominciare]
-- corpo di procedura qui
[estremità]

Per contribuire a mantenere le cose diritte, comincerei sempre con quello ed includerei il facoltativo comincio ed estremità appena in modo da è chiaro dove il vostro corpo di procedura comincia.

CON la dichiarazione nella domanda che lo ho dato è un'espressione comune della tabella e prende la forma:

CON cte_name COME ({selezionare la domanda})

Le dichiarazioni precedenti devono essere terminate prima del CON, in modo da vederete spesso questo As; CON per accertarsi che altre dichiarazioni siano prime chiusi.

Il vostro errore di cui sopra è dovuto voi confondere a partire CON dal a partire dalla procedura ed in modo da inserito COMINCIARE nel posto errato. Provare il codice corretto qui sotto.

Sperare che aiuti!
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:
62:
63:
64:
65:
66:
67:
68:
69:
70:
GENERARE LA PROCEDURA [dbo]. [prc_Messages_Response_Select_All]
      @FromProfileID INT
AS
COMINCIARE

REGOLARE NOCOUNT SOPRA;

; 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 * A PARTIRE dai msgs
ORDINE da MessageLevel, [MsgDate] DESC
;

ESTREMITÀ
Altre soluzioni  
 
programming4us programming4us