0

with in with SQLクエリを書きたいです。

いくつかのエラーを行います。助けてください:

DECLARE @Start AS DATETIME;
DECLARE @End AS DATETIME;
SET @Start = '2013-04-09';
SET @End = '2013-04-11';
with View_Solidnet_Training as 
(
with View_Solidnet_Training as
(
select  cast(@Start as datetime) DateValue
union all
select DateValue + 1
from View_Solidnet_Training
where DateValue + 1 <= cast(@End as datetime)
)
insert into OBJ_Availability  
select 34, DateValue, 'AM', 2, 'Test' from View_Solidnet_Training;
)
select * from View_Solidnet_Training where PK_Training_ID is not null;

エラー:

メッセージ 156、レベル 15、状態 1、行 7
キーワード「with」付近の構文が正しくありません。
メッセージ 319、レベル 15、状態 1、行 7
キーワード「with」付近の構文が正しくありません。このステートメントが共通テーブル式または xmlnamespaces 節である場合、前のステートメントはセミコロンで終了する必要があります。
メッセージ 102、レベル 15、状態 1、行 17
')' 付近の構文が正しくありません。

4

2 に答える 2

1

これを試して。これは単なるサンプルコードです。このコードでは、CTE with CTE と書かれています。

;with CTE1 as (
SELECT Patientid
,Lastname1
,age
,dob
,ROW_NUMBER() OVER (ORDER BY Patientid DESC) AS RowNumber
FROM PTN_PATIENT    
)
,CTE2 AS (
SELECT CTE1.Patientid
,CTE1.Lastname1
,CTE1.age
,CTE1.dob
,CTE1.RowNumber
,DATEDIFF(YEAR,CTE1.dob,GETDATE()) as yearOfservce
FROM Lab_LabDiagOrder INNER JOIN CTE1
ON Lab_LabDiagOrder.Patientid = CTE1.Patientid
WHERE CTE1.RowNumber between 1 and 5
)
SELECT * FROM CTE2;
于 2013-04-09T09:40:45.270 に答える
0

CTE (Common Table Expression) 内にDECLAREandを含めることはできません。SET

DECLARE @Start AS DATETIME;
DECLARE @End AS DATETIME;
SET @Start = '2013-04-09';
SET @End = '2013-04-11';

;WITH View_Solidnet_Training AS
(
    SELECT @Start AS DateValue

    UNION ALL

    SELECT DateValue + 1
    FROM View_Solidnet_Training
    WHERE DateValue + 1 <= @End 
)
SELECT
    34, DateValue, 'AM', 2, 'Test' 
FROM 
    View_Solidnet_Training
-- WHERE 
--    PK_Training_ID IS NOT NULL

PK_Training_ID それがどこから来るのかわかりません-コードのどこにもありません.....

ノート:

  • CTE 内にandDECLAREを含めることはできません。SETSELECTUNION ALL
  • とは既に次のように宣言されています@Start-それらを再び ....にキャストしてもまったく意味がありません。@EndDATETIMEDATETIME
  • CTE からの値は、ちょうど1 つの T-SQL ステートメントに対して、CTE の直後に使用できます。
于 2013-04-09T09:27:44.307 に答える