SQL Server用Microsoft OLE DBプロバイダの一部のバージョン(主にWindows XPの場合)がWITH
ステートメントをサポートしていないことを理解しました。そこで、私はSQL文をテーブル値関数に移動し、それをアプリケーションから呼び出すことにしました。今、私は立ち往生しています。 WITH
でINSERT INTO
声明を使用するにはどうすればよいですか?ここでは、CTE(WITH
声明)を省略し、代わりにそのインラインテーブル値関数を作成することができます:-(...SQL Serverのテーブル値関数でCTEステートメントを使用する方法
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
をあなたのCTEが再帰的である場合、あなたはおそらく勝ちましたそれをサブクエリ形式に書き直すことができないので、CTE形式は単純な味の問題ではありません。もちろん、再帰的なCTEは、慎重でないとオプティマイザをスローする可能性があります。 –
MattW
これは、cteのwith部分の前に ';'を使用するために使用されます。 – JJS