2 votes

Syntaxe incorrecte près du mot clé 'WITH' dans SQL Server

J'ai pu trouver beaucoup d'articles concernant ce problème, mais rien n'a aidé. Donc j'essaie d'insérer des données dans la table:

INSERT INTO [dbo].[TV.EIP_Year_Month] ([Number], [Data])
;WITH months(MonthNumber) AS
(
    SELECT 1
    UNION ALL
    SELECT MonthNumber + 1 
    FROM months
    WHERE MonthNumber < 12
)
SELECT
    CAST(DATEPART(YEAR, GETDATE()) AS VARCHAR) + '-' + 
        CAST(MonthNumber AS VARCHAR) + '-01'  AS Data
FROM 
    months

Je reçois ce message d'erreur:

Msg 102, Level 15, State 1, Line 6
Syntaxe incorrecte près de ';'.

Des idées sur la façon de résoudre ce problème?

3voto

Barry Piccinni Points 852

Je placerais l'instruction WITH avant l'INSERT de la manière suivante :

WITH months(MonthNumber) AS
(
    SELECT 1
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < 12
)
INSERT INTO [dbo].[TV.EIP_Year_Month]
  ([Number]
  ,[Data])
SELECT cast(datepart(year, GETDATE()) as varchar) + '-' + CAST(MonthNumber AS VARCHAR) + '-01'  as Data
FROM months

En supposant que le reste de votre instruction fonctionne pour vous, l'organiser de cette manière devrait fonctionner.

2voto

Stanislav Kundii Points 2680
;AVEC mois(NuméroMois) COMME
(
    SÉLECTIONNER 1
    UNION TOUS
    SÉLECTIONNER NuméroMois+1 
    DE mois
    OÙ NuméroMois < 12
)
INSERT INTO [dbo].[TV.EIP_Year_Month]
      ([Numéro]
      ,[Données])
sélectionner ?[Numéro]?, caster(datepart(année, GETDATE()) comme varchar) + '-' + CAST(NuméroMois COMME VARCHAR) + '-01'  comme Donneés
DE mois

1voto

Yogesh Sharma Points 29348

Pourquoi vous avez besoin d'utiliser CTE pendant seulement 12 mois :

select datefromparts(year(getdate()), MonthNumber, 1) as [date]
from ( values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12)
     ) t (MonthNumber);

Vous pouvez utiliser DATEFROMPARTS() pour convertir la date.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X