Sono giunto alla conclusione che alcune versioni di Microsoft OLE DB Provider per SQL Server (principalmente su Windows XP) non supportano l'istruzione WITH
. Così, ho deciso di spostare la mia istruzione SQL in una funzione valutata a livello di tabella e di chiamarla dalla mia applicazione. Ora, sono bloccato. Come dovrei usare la dichiarazione INSERT INTO
con WITH
? Ecco il codice che ho venire con finora, ma SQL Server non piace ... :-(Come utilizzare un'istruzione CTE in una funzione con valori di tabella in SQL Server
CREATE FUNCTION GetDistributionTable
(
@IntID int,
@TestID int,
@DateFrom datetime,
@DateTo datetime
)
RETURNS
@Table_Var TABLE
(
[Count] int,
Result float
)
AS
BEGIN
INSERT INTO @Table_Var ([Count], Result) WITH T(Result)
AS (SELECT ROUND(Result - AVG(Result) OVER(), 1)
FROM RawResults WHERE IntID = @IntID AND DBTestID = @TestID AND Time >= @DateFrom AND Time <= @DateTo)
SELECT COUNT(*) AS [Count],
Result
FROM T
GROUP BY Result
RETURN
END
GO
Se il CTE è ricorsiva probabilmente vinto essere in grado di riscriverlo nel modulo subquery, quindi il modulo CTE potrebbe essere più di una semplice questione di gusto. Naturalmente, le CTE ricorsive possono eliminare l'ottimizzatore se non si presta attenzione: –
MattW
così usato per usare un ';' davanti alla parte di cte. – JJS